diff --git a/docs/logo.png b/docs/logo.png new file mode 100644 index 000000000..a27e9be75 Binary files /dev/null and b/docs/logo.png differ diff --git a/src/CommonAssemblyInfo.cs b/src/CommonAssemblyInfo.cs new file mode 100644 index 000000000..54f812397 --- /dev/null +++ b/src/CommonAssemblyInfo.cs @@ -0,0 +1,21 @@ +using System; +using System.Reflection; +using System.Runtime.InteropServices; + +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.1433 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +[assembly: AssemblyVersionAttribute("0.1.0.0")] +[assembly: AssemblyCopyrightAttribute("Released by Jeremy D. Miller under the Apache 2.0 License")] +[assembly: AssemblyProductAttribute("FluentNHibernate")] +[assembly: AssemblyCompanyAttribute("FluentNHibernate")] +[assembly: AssemblyConfigurationAttribute("debug")] +[assembly: AssemblyInformationalVersionAttribute("0.1.0.0")] + diff --git a/src/FluentNHibernate.Testing/Debugging.cs b/src/FluentNHibernate.Testing/Debugging.cs new file mode 100644 index 000000000..246f391ad --- /dev/null +++ b/src/FluentNHibernate.Testing/Debugging.cs @@ -0,0 +1,14 @@ +using NUnit.Framework; + +namespace ShadeTree.Testing +{ + [TestFixture] + public class Debugging + { + [Test] + public void Break() + { + //Assert.Fail("Make it break"); + } + } +} \ No newline at end of file diff --git a/src/FluentNHibernate.Testing/DeclarativeTesting.htm b/src/FluentNHibernate.Testing/DeclarativeTesting.htm new file mode 100644 index 000000000..e095ebc47 --- /dev/null +++ b/src/FluentNHibernate.Testing/DeclarativeTesting.htm @@ -0,0 +1,213 @@ + + + + + + +

Yesterday, + David Laribee related some problems he experienced with refactorings in his + domain model leading to some breaking problems with NHibernate mappings.  + Specifically, the issues are:

+
    +
  1. Changing the property names of a domain model can break the NHibernate mapping
  2. +
  3. Changing the database fields can break the NHibernate mappings
  4. +
+

+ David went on to bemoan the absence of a quick way to validate NHibernate + mappings.  Ayende popped in with the suggestion that the presence of + integrated tests around the NHibernate usage would spot mapping problems.  + Other folks mentioned that there's a new ReSharper plugin to validate and + refactor NHibernate mappings.  I'll circle back to the refactoring plugin + in a while.  First I want to talk about quick ways to validate NHibernate + mappings.  Ayende is right of course about the integrated tests against the + individual queries, but I'm going to suggest that that isn't the most efficient + answer.  The bigger integration tests will tell you that something is + wrong, but from experience they'll be harder to diagnose because there is so + much more going on than simple property checking, and they provide a slow + feedback cycle because of how much stuff is going on.  What would be nice + is a way to walk right up to a mapping and specify which properties on a class + are supposed to be persisted and how.

+

+ I thought I would come out of my blogging retirement and show an example of the + Chad and Jeremy + approach to testing NHibernate mappings:

+
+        
+        [SetUp]
+        public void SetUp()
+        {
+            // Ensure that the StructureMap configuration is bootstrapped
+            // In our case, this includes everything we need setup to 
+            // execute NHibernate (mappings + ISessionFactory configuration)
+            // This will be pretty application specific here
+            Bootstrapper.RestartStructureMap();
+        }
+        
+        [Test]
+        public void SaveAndLoadCustomerContact()
+        {
+            new PersistenceSpecification<CustomerContact>()
+                .CheckProperty(x => x.Name, "Frank")
+                .CheckProperty(x => x.Email, "Email")
+                .CheckProperty(x => x.Extension, 123)
+                .CheckProperty(x => x.FaxNumber, "111-111-1111")
+                .CheckProperty(x => x.TelephoneNumber, "222-222-2222")
+                .CheckProperty(x => x.Title, "Mr.")
+                .VerifyTheMappings();
+        }
+        
+

+ All this test does is ensure that the 6 properties of the CustomerContact class + (Name, Email, Extension, FaxNumber, TelephoneNumber, Title) are mapped in + NHibernate.  We have some other methods for checking to many and many to + one type relationships. 

+

+ Behind the scenes the PersistenceSpecification<T> class:

+
    +
  1.  Creates a new instance of T
  2. +
  3. Uses the lambda expressions and suggested values in the calls to CheckProperty + to load values into the new instance of T
  4. +
  5. Grabs our IRepository out of StructureMap (of course), and saves the object
  6. +
  7. Grabs a second IRepository out of StructureMap
  8. +
  9. Fetches a second copy of the same T out of the second IRepository
  10. +
  11. Verifies that all of the specified properties in the specification were saved + and loaded.  If any single property does not match between the first T and + the second T, the test will fail.
  12. +
+

Here's the implementation of the PersistenceSpecification.VerifyTheMappings() method:

+
+        public void VerifyTheMappings()
+        {
+            // Create the initial copy
+            var first = new T();
+
+            // Set the "suggested" properties, including references
+            // to other entities and possibly collections
+            _allProperties.ForEach(p => p.SetValue(first));
+
+            // Save the first copy
+            _repository.Save(first);
+
+            // Get a completely different IRepository
+            var secondRepository = createRepository();
+
+            // "Find" the same entity from the second IRepository
+            var second = secondRepository.Find<T>(first.Id);
+
+            // Validate that each specified property and value
+            // made the round trip
+            // It's a bit naive right now because it fails on the first failure
+            _allProperties.ForEach(p => p.CheckValue(second));
+        }
+    
+ +

The advantage of this testing is that it gives a (relatively) fast feedback cycle + focused specifically on the mappings.  Tools that check the hbm.xml + mappings can only verify that what's there is correctly formed.  The + mapping tests above will catch missing mappings and desired behavior.  At a + bare minimum, you really should have at least one smoke test in your CI build + that simply tries to create an NHibernate ISession object from your + configuration.  Let that test run and possibly fail before any integrated + tests run.

+

Now, the ReSharper plugin for NHibernate sounds pretty cool.  I definitely + want little or no friction in renaming or adding properties in my Domain Model + classes (why I absolutely despise codegen your business object solutions).  + We beat the refactoring problem by eliminating HBM.XML.  As part of my New + Year's resolution to eliminate my exposure to angle bracket hell, we've created + the beginning of a Fluent Interface API to express NHibernate mappings.  + Using copious amounts of Generics (I guess .Net code just "wants" to have lots + of angle brackets) and lambda expressions, we're able to express NHibernate + mappings in a completely compiler-checked, ReSharper-able way.  Since we + switched to the FI, we've experienced far less trouble with mapping problems.  + Here's a couple of examples:

+ +
+    // Simple class with properties and a single "to-many" relationship
+    public class CustomerContactMap : ClassMap<CustomerContact>
+    {
+        public CustomerContactMap()
+        {
+            Map(x => x.Name);
+            Map(x => x.Email);
+            Map(x => x.Extension);
+            Map(x => x.FaxNumber);
+            Map(x => x.TelephoneNumber);
+            Map(x => x.Title);
+            References(x => x.Customer);
+        }
+    }
+    
+    // Class with a "Component"
+    public class CustomerDeliveryAddressMap : ClassMap<CustomerDeliveryAddress>
+    {
+        public CustomerDeliveryAddressMap()
+        {
+            Map(x => x.Name);
+            References(x => x.Customer);
+            Component<Address>(x => x.Address, m =>
+               {
+                   m.Map(x => x.AddressLine1);
+                   m.Map(x => x.AddressLine2);
+                   m.Map(x => x.AddressLine3);
+                   m.Map(x => x.CityName);
+                   m.Map(x => x.CountryName);
+                   m.References(x => x.State);
+                   m.References(x => x.PostalCode);
+               });
+        }
+    }
+    
+    // Class with some "has many" relationships
+    public class CustomerMap : ClassMap<Customer>
+    {
+        public CustomerMap()
+        {
+            HasMany<CustomerContact>(x => x.Contacts).CascadeAll();
+            HasMany<CustomerJob>(x => x.Jobs).CascadeAll();
+            HasMany<CustomerDeliveryAddress>(x => x.DeliveryAddresses).CascadeAll();
+
+            Map(x => x.Name);
+            Map(x => x.LookupName);
+            Map(x => x.IsGeneric);
+            Map(x => x.RequiresPurchaseOrder);
+            Map(x => x.Retired);
+        }
+    }
+    
+    
+        
+ +

With this approach, and backed up with the little PersistenceSpecification tests, + we can happily change class names and property names with relative confidence.  + Besides, the simple usage of Intellisense plus compiler safe code cuts down on + the number of mapping errors.  We're more or less greenfield at the moment, so we can get away with generating + the database from our NHibernate mappings on demand, but you can specify + specific table and column names in the language above for brownfield scenarios.  + I'd very confidently say that we're faster with this approach than we would be + with HBM.XML.

+

If you're interested, the complete code for everything I talked about is in the ShadeTree.DomainModel project in the StoryTeller codebase (and effectively released under the Apache 2.0 license). The code is at + http://storyteller.tigris.org/svn/storyteller/trunk/. Use the src\ShadeTree.sln for this stuff. I don't know that we'll ever get around to a fully supported release of this stuff, but I wanted to throw out the idea anyway. At this point I'm only extending this code when we need something new for our current project.  + A lot of the advantages of this approach are tied to application specific + conventions and also by tieing the forward generation of the database structure + to validation rules.

+

 

+ +

As for IoC container testing...

+

I'll overlook the fact that my friend David implicitly implied that an + IoC container not named StructureMap was the de facto standard. + Bil Simser posted a little snippet of code to smoke test the configuration of one of those other IoC containers.  StructureMap has had quite a bit + of diagnostic support since version 0.85, but StructureMap 2.5 will add the + ability to do this:

+
+        [SetUp]
+        public void SmokeTestStructureMapConfiguration()
+        {
+            ObjectFactory.AssertConfigurationIsValid();
+        }
+        
+

This will attempt to build every possible configured instance in StructureMap, perform any designated + environment tests (like trying to connect to a database), and generate a complete report of all errors encountered by StructureMap.  + If you're aggressive about putting all services into your IoC container, this + test can help measure the correctness of an installation.

+ + \ No newline at end of file diff --git a/src/FluentNHibernate.Testing/DomainModel/ConnectedTester.cs b/src/FluentNHibernate.Testing/DomainModel/ConnectedTester.cs new file mode 100644 index 000000000..aff0f0c76 --- /dev/null +++ b/src/FluentNHibernate.Testing/DomainModel/ConnectedTester.cs @@ -0,0 +1,278 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Linq.Expressions; +using System.Text; +using NHibernate; +using NUnit.Framework; +using ShadeTree.DomainModel; +using ShadeTree.DomainModel.Fixtures; +using ShadeTree.DomainModel.Mapping; +using NHibernate.Linq; +using ShadeTree.DomainModel.Query; +using StructureMap; + +namespace ShadeTree.Testing.DomainModel +{ + [TestFixture, Explicit] + public class ConnectedTester + { + private SessionSource _source; + + [SetUp] + public void SetUp() + { + IDictionary props = new Dictionary(); + props.Add("connection.provider", "NHibernate.Connection.DriverConnectionProvider"); + props.Add("connection.driver_class", "NHibernate.Driver.SqlClientDriver"); + props.Add("dialect", "NHibernate.Dialect.MsSql2000Dialect"); + props.Add("hibernate.dialect", "NHibernate.Dialect.MsSql2000Dialect"); + props.Add("use_outer_join", "true"); + props.Add("connection.connection_string", "Data Source=.;Initial Catalog=ShadeTree;Integrated Security=True;Pooling=False"); + //props.Add("show_sql", showSql); + props.Add("show_sql", true.ToString()); + + _source = new SessionSource(props, new TestModel()); + + _source.BuildSchema(); + + ObjectFactory.Inject(_source); + DomainObjectFinder.ClearAllFinders(); + } + + [TearDown] + public void TearDown() + { + ObjectFactory.ResetDefaults(); + } + + + [Test] + public void Spin_up_the_Linq_stuff() + { + ISession session = _source.CreateSession(); + + session.SaveOrUpdate(new Record{Name = "Jeremy", Age = 34}); + session.SaveOrUpdate(new Record{Name = "Jessica", Age = 29}); + session.SaveOrUpdate(new Record{Name = "Natalie", Age = 25}); + session.SaveOrUpdate(new Record{Name = "Hank", Age = 29}); + session.SaveOrUpdate(new Record{Name = "Darrell", Age = 34}); + session.SaveOrUpdate(new Record{Name = "Bill", Age = 34}); + session.SaveOrUpdate(new Record{Name = "Tim", Age = 35}); + session.SaveOrUpdate(new Record{Name = "Greg", Age = 36}); + + //ISession session2 = _source.CreateSession(); + //var query = from record in session2.Linq() where record.Age < 30 select record; + //foreach (Record record in query.ToList()) + //{ + // Debug.WriteLine(record.Name); + //} + + //return; + + Repository repository = new Repository(_source.CreateSession()); + Record[] records = repository.Query(record => record.Age == 29); + //records.Length.ShouldEqual(2); + + foreach (var record in records) + { + Debug.WriteLine(record.Name); + } + } + + [Test] + public void QueryBy_test() + { + ISession session = _source.CreateSession(); + + session.SaveOrUpdate(new Record { Name = "Jeremy", Age = 34 }); + session.SaveOrUpdate(new Record { Name = "Jessica", Age = 29 }); + session.SaveOrUpdate(new Record { Name = "Natalie", Age = 25 }); + session.SaveOrUpdate(new Record { Name = "Hank", Age = 29 }); + session.SaveOrUpdate(new Record { Name = "Darrell", Age = 34 }); + session.SaveOrUpdate(new Record { Name = "Bill", Age = 34 }); + session.SaveOrUpdate(new Record { Name = "Tim", Age = 35 }); + session.SaveOrUpdate(new Record { Name = "Greg", Age = 36 }); + + Repository repository = new Repository(_source.CreateSession()); + Record record = repository.FindBy(r => r.Name, "Hank"); + record.Name.ShouldEqual("Hank"); + } + + [Test] + public void Query_by_filters() + { + ISession session = _source.CreateSession(); + + session.SaveOrUpdate(new Record { Name = "Jeremy", Age = 34 }); + session.SaveOrUpdate(new Record { Name = "Jeremy", Age = 35 }); + session.SaveOrUpdate(new Record { Name = "Jessica", Age = 29 }); + session.SaveOrUpdate(new Record { Name = "Natalie", Age = 25 }); + session.SaveOrUpdate(new Record { Name = "Hank", Age = 29 }); + session.SaveOrUpdate(new Record { Name = "Darrell", Age = 34 }); + session.SaveOrUpdate(new Record { Name = "Bill", Age = 34 }); + session.SaveOrUpdate(new Record { Name = "Tim", Age = 35 }); + session.SaveOrUpdate(new Record { Name = "Greg", Age = 36 }); + + Repository repository = new Repository(_source.CreateSession()); + Record record = repository.FindBy(r => r.Age == 34 && r.Name == "Jeremy"); + record.Name.ShouldEqual("Jeremy"); + record.Age.ShouldEqual(34); + } + + [Test] + public void Query_with_multiple_expressions() + { + ISession session = _source.CreateSession(); + + session.SaveOrUpdate(new Record { Name = "Jeremy", Age = 34 }); + session.SaveOrUpdate(new Record { Name = "Jeremy", Age = 35 }); + + Repository repository = new Repository(_source.CreateSession()); + Record[] records = repository.Query(r => r.Age >= 35 && r.Name == "Jeremy"); + + records.ShouldHaveCount(1); + records[0].Name.ShouldEqual("Jeremy"); + records[0].Age.ShouldEqual(35); + } + + [Test] + public void Try_out_EntityQuery() + { + var queryDef = new EntityQueryDefinitionBuilder() + .AllowFilterOn(r => r.Age) + .AllowFilterOn(r => r.Name) + .QueryDefinition; + + ISession session = _source.CreateSession(); + + session.SaveOrUpdate(new Record { Name = "Jeremy", Age = 34 }); + session.SaveOrUpdate(new Record { Name = "Jeremy", Age = 35 }); + + Repository repository = new Repository(_source.CreateSession()); + + var query = new EntityQueryBuilder(queryDef); + query.AddFilter(new BinaryFilterType { FilterExpressionType = ExpressionType.Equal }, queryDef.GetFilterPropertyForKey("Age"), "35"); + query.AddFilter(new StringFilterType { StringMethod = s => s.EndsWith("") }, queryDef.GetFilterPropertyForKey("Name"), "emy"); + + Record[] records = repository.Query(query.FilterExpression); + + records.ShouldHaveCount(1); + records[0].Name.ShouldEqual("Jeremy"); + records[0].Age.ShouldEqual(35); + } + + [Test] + public void Try_out_DomainObjectFinder() + { + ISession session = _source.CreateSession(); + + session.SaveOrUpdate(new Record { Name = "Jeremy", Age = 34 }); + session.SaveOrUpdate(new Record { Name = "Jeremy", Age = 35 }); + session.SaveOrUpdate(new Record { Name = "Jessica", Age = 29 }); + session.SaveOrUpdate(new Record { Name = "Natalie", Age = 25 }); + session.SaveOrUpdate(new Record { Name = "Hank", Age = 29 }); + session.SaveOrUpdate(new Record { Name = "Darrell", Age = 34 }); + session.SaveOrUpdate(new Record { Name = "Bill", Age = 34 }); + session.SaveOrUpdate(new Record { Name = "Chad", Age = 35 }); + session.SaveOrUpdate(new Record { Name = "Earl", Age = 36 }); + + Repository repository = new Repository(_source.CreateSession()); + ObjectFactory.Inject(repository); + + + + + DomainObjectFinder.Type().IsFoundByProperty(r => r.Name); + + + + + Record record = DomainObjectFinder.Find("Chad"); + record.Name.ShouldEqual("Chad"); + } + + + [Test] + public void Try_out_DomainObjectFinder2() + { + ISession session = _source.CreateSession(); + + session.SaveOrUpdate(new Record { Name = "Jeremy", Age = 34 }); + session.SaveOrUpdate(new Record { Name = "Jeremy", Age = 35 }); + session.SaveOrUpdate(new Record { Name = "Jessica", Age = 29 }); + session.SaveOrUpdate(new Record { Name = "Natalie", Age = 25 }); + session.SaveOrUpdate(new Record { Name = "Hank", Age = 29 }); + session.SaveOrUpdate(new Record { Name = "Darrell", Age = 34 }); + session.SaveOrUpdate(new Record { Name = "Bill", Age = 34 }); + session.SaveOrUpdate(new Record { Name = "Chad", Age = 35 }); + session.SaveOrUpdate(new Record { Name = "Earl", Age = 36 }); + + Repository repository = new Repository(_source.CreateSession()); + ObjectFactory.Inject(repository); + + + + + DomainObjectFinder.Type().IsFoundBy(name => + { + return new Record{Name = name}; + }); + + + Record record = DomainObjectFinder.Find("Chad"); + record.Name.ShouldEqual("Chad"); + } + + [Test] + public void Save_and_find() + { + Repository repository1 = new Repository(_source.CreateSession()); + var record1 = new Record { Name = "Jeremy", Age = 34 }; + repository1.Save(record1); + + Repository repository2 = new Repository(_source.CreateSession()); + Record record2 = repository2.Find(record1.Id); + + record1.ShouldNotBeTheSameAs(record2); + record2.Name.ShouldEqual("Jeremy"); + } + + [Test] + public void MappingTest1() + { + new PersistenceSpecification() + .CheckProperty(r => r.Age, 22) + .CheckProperty(r => r.Name, "somebody") + .CheckProperty(r => r.Location, "somebody") + .VerifyTheMappings(); + + } + } + + public class TestModel : PersistenceModel + { + public TestModel() + { + addMappingsFromThisAssembly(); + } + } + + public class RecordMap : ClassMap + { + public RecordMap() + { + UseIdentityForKey(x => x.Id, "id"); + Map(x => x.Name); + Map(x => x.Age); + } + } + + public class Record : Entity + { + public string Name { get; set; } + public int Age { get; set; } + public string Location { get; set; } + } +} diff --git a/src/FluentNHibernate.Testing/DomainModel/EntityEquality.cs b/src/FluentNHibernate.Testing/DomainModel/EntityEquality.cs new file mode 100644 index 000000000..fbd9d16cd --- /dev/null +++ b/src/FluentNHibernate.Testing/DomainModel/EntityEquality.cs @@ -0,0 +1,92 @@ +using NUnit.Framework; +using ShadeTree.DomainModel; + +namespace ShadeTree.Testing.DomainModel +{ + [TestFixture] + public class EntityEquality + { + [Test] + public void Two_entities_with_the_same_Id_should_equal_each_other() + { + var first = new Entity{Id = 99}; + var second = new Entity { Id = 99 }; + + first.Equals(second).ShouldBeTrue(); + second.Equals(first).ShouldBeTrue(); + + + Equals(first, second).ShouldBeTrue(); + Equals(second, first).ShouldBeTrue(); + + first.GetHashCode().ShouldEqual(second.GetHashCode()); + + (first == second).ShouldBeTrue(); + (second == first).ShouldBeTrue(); + + (first != second).ShouldBeFalse(); + (second != first).ShouldBeFalse(); + } + + [Test] + public void Two_entities_with_different_Ids_should_not_equal_each_other() + { + var first = new Entity { Id = 66 }; + var second = new Entity { Id = 77 }; + + first.Equals(second).ShouldBeFalse(); + second.Equals(first).ShouldBeFalse(); + + + Equals(first, second).ShouldBeFalse(); + Equals(second, first).ShouldBeFalse(); + + first.GetHashCode().ShouldNotEqual(second.GetHashCode()); + + (first == second).ShouldBeFalse(); + (second == first).ShouldBeFalse(); + + (first != second).ShouldBeTrue(); + (second != first).ShouldBeTrue(); + } + + [Test] + public void Subclassed_entities_should_equal_each_other_with_same_Id() + { + var first = new TestSubEntity {Id = 99}; + var second = new TestSubEntity { Id = 99 }; + + first.Equals(second).ShouldBeTrue(); + } + + [Test] + public void Subclassed_entities_should_not_equal_entities_of_a_different_type_even_if_the_Id_is_the_same() + { + var first = new TestSubEntity { Id = 99 }; + var second = new AnotherSubEntity { Id = 99 }; + + first.Equals(second).ShouldBeFalse(); + } + + [Test] + public void Deep_subclassed_entities_should_not_equal_their_parent_classed_entities_even_if_the_Id_is_the_same() + { + var first = new TestSubEntity { Id = 99 }; + var second = new DeepSubEntity { Id = 99 }; + + first.Equals(second).ShouldBeFalse(); + } + + public class TestSubEntity : Entity + { + } + + public class AnotherSubEntity : Entity + { + } + + public class DeepSubEntity : TestSubEntity + { + } + } +} \ No newline at end of file diff --git a/src/FluentNHibernate.Testing/DomainModel/Generation/CodeFileSmokeTester.cs b/src/FluentNHibernate.Testing/DomainModel/Generation/CodeFileSmokeTester.cs new file mode 100644 index 000000000..b81bbad06 --- /dev/null +++ b/src/FluentNHibernate.Testing/DomainModel/Generation/CodeFileSmokeTester.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using NUnit.Framework; +using ShadeTree.DomainModel.Generation; + +namespace ShadeTree.Testing.DomainModel.Generation +{ + [TestFixture] + public class CodeFileSmokeTester + { + [Test] + public void SmokeTest_Code_File() + { + CodeFile file = new CodeFile("Fixtures.cs", "DomainFixtureGeneration"); + file.AddDomainType(); + file.AddDomainType(); + + file.WriteToConsole(); + file.WriteToFile(); + } + } +} diff --git a/src/FluentNHibernate.Testing/DomainModel/InMemoryRepositoryTester.cs b/src/FluentNHibernate.Testing/DomainModel/InMemoryRepositoryTester.cs new file mode 100644 index 000000000..a178d2376 --- /dev/null +++ b/src/FluentNHibernate.Testing/DomainModel/InMemoryRepositoryTester.cs @@ -0,0 +1,85 @@ +using System.Diagnostics; +using NUnit.Framework; +using ShadeTree.DomainModel; + +namespace ShadeTree.Testing.DomainModel +{ + [TestFixture] + public class InMemoryRepositoryTester + { + [Test] + public void Store_and_find_two_different_types_of_objects() + { + InMemoryRepository repository = new InMemoryRepository(); + repository.Save(new Case {Id = 2}); + repository.Save(new Case {Id = 3}); + repository.Save(new Contact {Id = 2}); + repository.Save(new Contact {Id = 3}); + + repository.Find(2).Id.ShouldEqual(2); + repository.Find(3).ShouldBeOfType(typeof(Contact)); + repository.Find(3).ShouldBeOfType(typeof(Case)); + } + + [Test] + public void Query_by_expression() + { + InMemoryRepository repository = new InMemoryRepository(); + repository.Save(new Case{Name = "Jeremy", Number = 10}); + repository.Save(new Case{Name = "Darth Vader", Number = 5}); + repository.Save(new Case{Name = "Darth Maul", Number = 6}); + repository.Save(new Case{Name = "Luke", Number = 12}); + repository.Save(new Case{Name = "Han Solo", Number = 6}); + repository.Save(new Case{Name = "Eric", Number = 5}); + repository.Save(new Case{Name = "Corwin", Number = 4}); + + repository.Query(c => c.Name.StartsWith("Darth")).Length.ShouldEqual(2); + repository.Query(c => c.Number == 6).Length.ShouldEqual(2); + Case[] cases = repository.Query(c => c.Number > 5); + cases.Length.ShouldEqual(4); + } + + [Test] + public void Find_by_property() + { + InMemoryRepository repository = new InMemoryRepository(); + repository.Save(new Case { Name = "Jeremy", Number = 10 }); + repository.Save(new Case { Name = "Darth Vader", Number = 5 }); + repository.Save(new Case { Name = "Darth Maul", Number = 6 }); + repository.Save(new Case { Name = "Luke", Number = 12 }); + repository.Save(new Case { Name = "Han Solo", Number = 6 }); + repository.Save(new Case { Name = "Eric", Number = 5 }); + repository.Save(new Case { Name = "Corwin", Number = 4 }); + + repository.FindBy(c => c.Name, "Jeremy").Name.ShouldEqual("Jeremy"); + } + + [Test] + public void Find_by_query() + { + InMemoryRepository repository = new InMemoryRepository(); + repository.Save(new Case { Name = "Jeremy", Number = 10 }); + repository.Save(new Case { Name = "Darth Vader", Number = 5 }); + repository.Save(new Case { Name = "Darth Maul", Number = 6 }); + repository.Save(new Case { Name = "Luke", Number = 12 }); + repository.Save(new Case { Name = "Han Solo", Number = 6 }); + repository.Save(new Case { Name = "Eric", Number = 5 }); + repository.Save(new Case { Name = "Corwin", Number = 4 }); + + repository.FindBy(c => c.Name == "Corwin").Name.ShouldEqual("Corwin"); + repository.FindBy(c => c.Number == 10).Name.ShouldEqual("Jeremy"); + repository.FindBy(c => c.Number == 6 && c.Name == "Han Solo").Name.ShouldEqual("Han Solo"); + } + + } + + public class Case : Entity + { + public long Number { get; set; } + public string Name { get; set; } + } + + public class Contact : Entity + { + } +} \ No newline at end of file diff --git a/src/FluentNHibernate.Testing/DomainModel/Mapping/ClassMapXmlCreationTester.cs b/src/FluentNHibernate.Testing/DomainModel/Mapping/ClassMapXmlCreationTester.cs new file mode 100644 index 000000000..c7ec4964f --- /dev/null +++ b/src/FluentNHibernate.Testing/DomainModel/Mapping/ClassMapXmlCreationTester.cs @@ -0,0 +1,390 @@ +using System.Collections.Generic; +using System.Diagnostics; +using System.Xml; +using NUnit.Framework; +using ShadeTree.DomainModel; +using ShadeTree.DomainModel.Mapping; +using ShadeTree.Validation; + +namespace ShadeTree.Testing.DomainModel.Mapping +{ + [TestFixture] + public class ClassMapXmlCreationTester + { + #region Setup/Teardown + + [SetUp] + public void SetUp() + { + } + + #endregion + + private XmlDocument document; + + private XmlElement elementForProperty(string propertyName) + { + string xpath = string.Format("class/property[@name='{0}']", propertyName); + return (XmlElement) document.DocumentElement.SelectSingleNode(xpath); + } + + [Test, Ignore("Needs to be rewritten at some point")] + public void BasicManyToManyMapping() + { + var map = new ClassMap(); + map.HasManyToMany(x => x.Children); + + document = map.CreateMapping(new MappingVisitor()); + var element = (XmlElement) document.DocumentElement.SelectSingleNode("class/bag[@name='Children']"); + + element.AttributeShouldEqual("name", "Children"); + element.AttributeShouldEqual("cascade", "none"); + + element["key"].AttributeShouldEqual("column", "MappedObject_Fk"); + element["many-to-many"].AttributeShouldEqual("class", typeof (ChildObject).AssemblyQualifiedName); + element["many-to-many"].AttributeShouldEqual("table", typeof (ChildObject).Name); + element["many-to-many"].AttributeShouldEqual("column", "ChildObject_Fk"); + } + + [Test] + public void BasicOneToManyMapping() + { + var map = new ClassMap(); + map.HasMany(x => x.Children); + + document = map.CreateMapping(new MappingVisitor()); + + var element = + (XmlElement) document.DocumentElement.SelectSingleNode("class/bag[@name='Children']"); + + element.AttributeShouldEqual("name", "Children"); + element.AttributeShouldEqual("cascade", "none"); + + element["key"].AttributeShouldEqual("column", "MappedObject_id"); + element["one-to-many"].AttributeShouldEqual("class", typeof (ChildObject).AssemblyQualifiedName); + } + + [Test] + public void AdvancedOneToManyMapping() + { + var map = new ClassMap(); + map.HasMany(x => x.Children).LazyLoad().IsInverse(); + + document = map.CreateMapping(new MappingVisitor()); + + var element = + (XmlElement)document.DocumentElement.SelectSingleNode("class/bag[@name='Children']"); + + element.AttributeShouldEqual("lazy", "true"); + element.AttributeShouldEqual("inverse", "true"); + } + + [Test] + public void BuildTheHeaderXmlWithAssemblyAndNamespace() + { + var map = new ClassMap(); + document = map.CreateMapping(new MappingVisitor()); + + document.DocumentElement.GetAttribute("assembly").ShouldEqual(typeof (MappedObject).Assembly.GetName().Name); + document.DocumentElement.GetAttribute("namespace").ShouldEqual(typeof (MappedObject).Namespace); + } + + [Test] + public void CascadeAll_with_many_to_many() + { + var map = new ClassMap(); + map.HasManyToMany(x => x.Children).CascadeAll(); + + document = map.CreateMapping(new MappingVisitor()); + var element = (XmlElement) document.DocumentElement.SelectSingleNode("class/bag[@name='Children']"); + + element.AttributeShouldEqual("cascade", "all"); + } + + [Test] + public void CascadeAll_with_one_to_many() + { + var map = new ClassMap(); + map.HasMany(x => x.Children).CascadeAll(); + + document = map.CreateMapping(new MappingVisitor()); + var element = + (XmlElement) document.DocumentElement.SelectSingleNode("class/bag[@name='Children']"); + + element.AttributeShouldEqual("cascade", "all"); + } + + [Test] + public void Create_a_component_mapping() + { + var map = new ClassMap(); + map.Component(x => x.Component, c => + { + c.Map(x => x.Name); + c.Map(x => x.Age); + }); + + document = map.CreateMapping(new MappingVisitor()); + + var componentElement = + (XmlElement) document.DocumentElement.SelectSingleNode("class/component"); + + componentElement.AttributeShouldEqual("name", "Component"); + componentElement.AttributeShouldEqual("insert", "true"); + componentElement.AttributeShouldEqual("update", "true"); + + componentElement.ShouldHaveChild("property[@name='Name']"); + componentElement.ShouldHaveChild("property[@name='Age']"); + } + + + [Test] + public void + Create_a_component_mapping_for_a_component_that_is_not_required_and_the_fields_for_the_component_should_not_be_non_null + () + { + var map = new ClassMap(); + map.Component(x => x.Parent, c => { c.Map(x => x.Name); }); + + document = map.CreateMapping(new MappingVisitor()); + + var element = + (XmlElement) document.DocumentElement.SelectSingleNode("class/component/property[@name='Name']"); + + Debug.WriteLine(element.OuterXml); + + element.HasAttribute("not-null").ShouldBeFalse(); + } + + [Test] + public void Create_a_component_mapping_for_a_required_child_and_set_the_required_fields_of_component_to_non_null + () + { + var map = new ClassMap(); + map.Component(x => x.Component, c => + { + c.Map(x => x.Name); + c.Map(x => x.Age); + }); + + document = map.CreateMapping(new MappingVisitor()); + + var componentElement = + (XmlElement) document.DocumentElement.SelectSingleNode("class/component"); + + var propertyElement = (XmlElement) componentElement.SelectSingleNode("property[@name = 'Age']"); + propertyElement.AttributeShouldEqual("not-null", "true"); + } + + [Test] + public void CreateDiscriminator() + { + var map = new ClassMap(); + map.DiscriminateSubClassesOnColumn("Type"); + + document = map.CreateMapping(new MappingVisitor()); + var element = (XmlElement) document.DocumentElement.SelectSingleNode("class/discriminator"); + element.AttributeShouldEqual("column", "Type"); + element.AttributeShouldEqual("type", "String"); + } + + [Test] + public void CreateTheSubClassMappings() + { + var map = new ClassMap(); + + map.DiscriminateSubClassesOnColumn("Type") + .SubClass().IsIdentifiedBy("red") + .MapSubClassColumns(m => { m.Map(x => x.Name); }); + + document = map.CreateMapping(new MappingVisitor()); + + Debug.WriteLine(document.OuterXml); + + var element = (XmlElement) document.DocumentElement.SelectSingleNode("//subclass"); + element.AttributeShouldEqual("name", "SecondMappedObject"); + element.AttributeShouldEqual("discriminator-value", "red"); + + XmlElement propertyElement = element["property"]; + propertyElement.AttributeShouldEqual("column", "Name"); + } + + [Test] + public void Creating_a_many_to_one_reference() + { + var map = new ClassMap(); + map.References(x => x.Parent); + + document = map.CreateMapping(new MappingVisitor()); + var element = (XmlElement) document.DocumentElement.SelectSingleNode("class/many-to-one"); + + element.AttributeShouldEqual("name", "Parent"); + element.AttributeShouldEqual("cascade", "all"); + element.AttributeShouldEqual("column", "Parent_id"); + } + + [Test] + public void Creating_a_many_to_one_reference_sets_the_column_overrides() + { + var map = new ClassMap(); + map.References(x => x.Parent); + + document = map.CreateMapping(new MappingVisitor()); + + Debug.WriteLine(document.DocumentElement.OuterXml); + + var element = (XmlElement)document.DocumentElement.SelectSingleNode("class/many-to-one"); + + element.AttributeShouldEqual("foreign-key", "FK_MappedObjectToParent"); + } + + [Test] + public void DetermineTheTableName() + { + var map = new ClassMap(); + map.TableName.ShouldEqual("MappedObject"); + + map.TableName = "Different"; + map.TableName.ShouldEqual("Different"); + } + + [Test] + public void DomainClassMapAutomaticallyCreatesTheId() + { + var map = new ClassMap(); + map.UseIdentityForKey(x => x.Id, "id"); + document = map.CreateMapping(new MappingVisitor()); + + XmlElement idElement = document.DocumentElement["class"]["id"]; + idElement.ShouldNotBeNull(); + + idElement.GetAttribute("name").ShouldEqual("Id"); + idElement.GetAttribute("column").ShouldEqual("id"); + idElement.GetAttribute("type").ShouldEqual("Int64"); + idElement.GetAttribute("unsaved-value").ShouldEqual("0"); + + XmlElement generatorElement = idElement["generator"]; + generatorElement.ShouldNotBeNull(); + generatorElement.GetAttribute("class").ShouldEqual("identity"); + } + + [Test] + public void Map_an_enumeration() + { + var map = new ClassMap(); + map.Map(x => x.Color); + + document = map.CreateMapping(new MappingVisitor()); + XmlElement element = elementForProperty("Color"); + + Debug.WriteLine(element.OuterXml); + + element.AttributeShouldEqual("type", typeof (GenericEnumMapper).AssemblyQualifiedName); + element["column"].AttributeShouldEqual("name", "Color"); + element["column"].AttributeShouldEqual("sql-type", "string"); + element["column"].AttributeShouldEqual("length", "50"); + } + + [Test] + public void MapASimplePropertyWithNoOverrides() + { + var map = new ClassMap(); + map.Map(x => x.Name); + + document = map.CreateMapping(new MappingVisitor()); + XmlElement element = elementForProperty("Name"); + + element.AttributeShouldEqual("name", "Name"); + element.AttributeShouldEqual("column", "Name"); + element.AttributeShouldEqual("type", "String"); + } + + [Test] + public void SimpleProperty_picks_up_maximum_length_for_string_fields() + { + var map = new ClassMap(); + map.Map(x => x.Name); + map.Map(x => x.NickName); + + document = map.CreateMapping(new MappingVisitor()); + + Debug.WriteLine(document.DocumentElement.OuterXml); + + elementForProperty("Name").AttributeShouldEqual("length", "100"); + elementForProperty("NickName").AttributeShouldEqual("length", "10"); + } + + [Test] + public void SimpleProperty_picks_up_not_null_for_required() + { + var map = new ClassMap(); + map.Map(x => x.Name); + map.Map(x => x.NickName); + + document = map.CreateMapping(new MappingVisitor()); + elementForProperty("Name").AttributeShouldEqual("not-null", "true"); + elementForProperty("NickName").DoesNotHaveAttribute("not-null"); + } + + [Test] + public void WriteTheClassNode() + { + var map = new ClassMap(); + document = map.CreateMapping(new MappingVisitor()); + + XmlElement classElement = document.DocumentElement["class"]; + classElement.ShouldNotBeNull(); + + classElement.AttributeShouldEqual("name", typeof (MappedObject).Name); + classElement.AttributeShouldEqual("table", map.TableName); + } + } + + public class SecondMappedObject + { + [Required] + public string Name { get; set; } + public long Id { get; set; } + } + + public class ComponentOfMappedObject + { + public string Name { get; set; } + + [Required] + public int Age { get; set; } + } + + public enum ColorEnum + { + Blue, + Green, + Red + } + + public class MappedObject + { + public ColorEnum Color { get; set; } + + [Required] + public ComponentOfMappedObject Component { get; set; } + + public SecondMappedObject Parent { get; set; } + + [Required] + public string Name { get; set; } + + [MaximumStringLength(10)] + public string NickName { get; set; } + + + public IList Children { get; set; } + + public long Id { get; set; } + } + + public class ChildObject + { + public int Id { get; set; } + } +} \ No newline at end of file diff --git a/src/FluentNHibernate.Testing/DomainModel/Mapping/ConventionsTester.cs b/src/FluentNHibernate.Testing/DomainModel/Mapping/ConventionsTester.cs new file mode 100644 index 000000000..1e265aafb --- /dev/null +++ b/src/FluentNHibernate.Testing/DomainModel/Mapping/ConventionsTester.cs @@ -0,0 +1,94 @@ +using System; +using System.Reflection; +using NUnit.Framework; +using Rhino.Mocks; +using ShadeTree.Core; +using ShadeTree.Core.Validation; +using ShadeTree.DomainModel; +using ShadeTree.DomainModel.Mapping; + +namespace ShadeTree.Testing.DomainModel.Mapping +{ + [TestFixture] + public class ConventionsTester + { + [Test] + public void Set_the_convention_for_foreign_keys() + { + new Conventions().GetForeignKeyNameOfParent(typeof (Invoice)).ShouldEqual("Invoice_id"); + } + + [Test] + public void Get_the_convention_for_a_relationship() + { + new Conventions().GetForeignKeyName(typeof (Site).GetProperty("Primary")).ShouldEqual("Primary_id"); + } + + [Test] + public void add_property_convention_for_type_of_attribute() + { + MockRepository mocks = new MockRepository(); + IProperty property = mocks.DynamicMock(); + + + using (mocks.Record()) + { + PropertyInfo propertyInfo = ReflectionHelper.GetProperty(s => s.Name); + Expect.Call(property.Property).Return(propertyInfo).Repeat.Any(); + Expect.Call(property.PropertyType).Return(typeof(string)).Repeat.Any(); + + property.SetAttributeOnColumnElement("My", "true"); + } + + using (mocks.Playback()) + { + var conventions = new Conventions(); + conventions.ForAttribute((a, p) => p.SetAttributeOnColumnElement("My", "true")); + conventions.AlterMap(property); + } + } + + [Test] + public void add_unique_property_for_Unique_attribute_by_default() + { + MockRepository mocks = new MockRepository(); + IProperty property = mocks.DynamicMock(); + + + using (mocks.Record()) + { + PropertyInfo propertyInfo = ReflectionHelper.GetProperty(s => s.LastName); + Expect.Call(property.Property).Return(propertyInfo).Repeat.Any(); + Expect.Call(property.PropertyType).Return(typeof(string)).Repeat.Any(); + + property.SetAttributeOnColumnElement("unique", "true"); + } + + using (mocks.Playback()) + { + var conventions = new Conventions(); + conventions.AlterMap(property); + } + } + } + + public class Invoice{} + + public class Site + { + [My] + public string Name { get; set; } + + [Unique] + public string LastName { get; set; } + + public Address Primary { get; set; } + public Address Secondary { get; set; } + } + public class Address{} + + public class MyAttribute : Attribute + { + + } +} \ No newline at end of file diff --git a/src/FluentNHibernate.Testing/DomainModel/Mapping/PropertyMapTester.cs b/src/FluentNHibernate.Testing/DomainModel/Mapping/PropertyMapTester.cs new file mode 100644 index 000000000..47c77486b --- /dev/null +++ b/src/FluentNHibernate.Testing/DomainModel/Mapping/PropertyMapTester.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Xml; +using NUnit.Framework; +using ShadeTree.Core; +using ShadeTree.DomainModel; +using ShadeTree.DomainModel.Mapping; + +namespace ShadeTree.Testing.DomainModel.Mapping +{ + [TestFixture] + public class PropertyMapTester + { + [Test] + public void SetAttributeOnColumnElement() + { + PropertyInfo property = ReflectionHelper.GetProperty(x => x.Name); + var map = new PropertyMap(property, false, property.Name, typeof(PropertyTarget)); + map.SetAttributeOnColumnElement("unique", "true"); + + var document = new XmlDocument(); + XmlElement classElement = document.CreateElement("root"); + map.Write(classElement, new MappingVisitor()); + + var columnElement = (XmlElement) classElement.SelectSingleNode("property/column"); + columnElement.AttributeShouldEqual("unique", "true"); + } + } + + public class PropertyTarget + { + public string Name { get; set; } + } +} \ No newline at end of file diff --git a/src/FluentNHibernate.Testing/DomainModel/Query/EntityQueryDefinitionTester.cs b/src/FluentNHibernate.Testing/DomainModel/Query/EntityQueryDefinitionTester.cs new file mode 100644 index 000000000..c5a04fc94 --- /dev/null +++ b/src/FluentNHibernate.Testing/DomainModel/Query/EntityQueryDefinitionTester.cs @@ -0,0 +1,179 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Linq.Expressions; +using NUnit.Framework; +using ShadeTree.DomainModel; +using ShadeTree.DomainModel.Query; + +namespace ShadeTree.Testing.DomainModel.Query +{ + public class FooClass + { + public string foo { get; set; } + } + + [TestFixture] + public class EntityQueryDefinitionTester + { + [Test] + public void AddQuickFilterFor_should_add_new_FilterableProperty_to_the_quick_filters_collection_as_well_as_the_general_filter_collection() + { + var query = new EntityQueryDefinition(); + var filterProp = FilterableProperty.Build(x => x.foo); + + query.AddQuickFilterProperty(filterProp); + + query.QuickFilterProperties.ShouldHaveCount(1); + query.FilterableProperties.ShouldHaveCount(1); + } + + [Test] + public void AllowFilterOn_should_add_new_FilterableProperty_to_the_query_filter_collection() + { + var query = new EntityQueryDefinition(); + var filterProp = FilterableProperty.Build(x => x.foo); + + query.AddFilterProperty(filterProp); + + query.FilterableProperties.ShouldHaveCount(1); + } + } + + [TestFixture] + public class EntityQueryDefinitionBuilderTester + { + [Test] + public void + AddQuickFilterFor_should_add_new_FilterableProperty_to_the_quick_filters_collection_as_well_as_the_general_filter_collection + () + { + var query = new EntityQueryDefinitionBuilder(); + + query.AddQuickFilterFor(t => t.Name); + + query.QueryDefinition.QuickFilterProperties.ShouldHaveCount(1); + query.QueryDefinition.FilterableProperties.ShouldHaveCount(1); + } + + [Test] + public void AllowFilterOn_should_add_new_FilterableProperty_to_the_query_filter_collection() + { + var query = new EntityQueryDefinitionBuilder(); + + query.AllowFilterOn(t => t.Name); + + query.QueryDefinition.FilterableProperties.ShouldHaveCount(1); + } + } + + [TestFixture] + public class EntityQueryBuilderTester + { + #region Setup/Teardown + + [SetUp] + public void SetUp() + { + _queryDef = new EntityQueryDefinition(); + _query = new EntityQueryBuilder(_queryDef); + + _nameProp = FilterableProperty.Build(t => t.Name); + _nameProp.PropertyType.ShouldEqual(typeof (string)); + + _ageProp = FilterableProperty.Build(t => t.Age); + + FilterTypeRegistry.ResetAll(); + } + + #endregion + + private EntityQueryBuilder _query; + private FilterableProperty _nameProp; + private FilterableProperty _ageProp; + private EntityQueryDefinition _queryDef; + + [Test] + public void EntityQueryBuilder_AddFilter_should_add_a_new_filter_and_add_it_to_the_previous_filter_using_the_AndAlso_operator() + { + _query.AddFilter(new StringFilterType {StringMethod = s => s.StartsWith("")}, _nameProp, "Fo"); + _query.AddFilter(new BinaryFilterType {FilterExpressionType = ExpressionType.Equal}, _ageProp, "35"); + + _query.FilterExpression.ToString().Contains("&&").ShouldBeTrue(); + } + + [Test] + public void EntityQueryBuilder_AddFilter_should_change_the_type_if_the_value_type_is_not_a_string() + { + _query.AddFilter(new BinaryFilterType {FilterExpressionType = ExpressionType.Equal}, _ageProp, "35"); + + _query.FilterExpression.ToString().Contains("ChangeType").ShouldBeTrue(); + } + + [Test] + public void EntityQueryBuilder_AddFilter_should_not_change_the_type_if_the_value_type_is_already_a_string() + { + _query.AddFilter(new StringFilterType {StringMethod = s => s.StartsWith("")}, _nameProp, "Fo"); + + _query.FilterExpression.ToString().Contains("ChangeType").ShouldBeFalse(); + } + + [Test] + public void EntityQueryBuilder_AddFilter_SmokeTest() + { + _query.AddFilter(new StringFilterType {StringMethod = s => s.StartsWith("")}, _nameProp, "Fo"); + _query.AddFilter(new BinaryFilterType {FilterExpressionType = ExpressionType.Equal}, _ageProp, "35"); + + var itemList = new List + { + new QueryDefTestEntity {Name = "Bar", Age = 99}, + new QueryDefTestEntity {Name = "Foo", Age = 35}, + new QueryDefTestEntity {Name = "Baz", Age = 1} + }; + + QueryDefTestEntity[] values = itemList.AsQueryable().Where(_query.FilterExpression).ToArray(); + + values.Length.ShouldEqual(1); + values[0].Name.ShouldEqual("Foo"); + values[0].Age.ShouldEqual(35); + } + + [Test] + public void EntityQueryBuilder_PrepareQuery_should_loop_through_each_criterion_and_set_up_a_filter() + { + var repo = new InMemoryRepository(); + repo.Save(new QueryDefTestEntity {Name = "Bar", Age = 99}); + repo.Save(new QueryDefTestEntity {Name = "Foo", Age = 35}); + repo.Save(new QueryDefTestEntity {Name = "Baz", Age = 1}); + + FilterTypeRegistry.ClearAll(); + + FilterTypeRegistry.RegisterFilter( + new StringFilterType + { + Key = "StringFoo", + StringMethod = s => s.StartsWith("") + }) + .ForType(); + + _queryDef.AddFilterProperty(FilterableProperty.Build(t => t.Name)); + + + var crit = new Criteria + {property = "Name", op = "StringFoo", value = "Fo"}; + + QueryDefTestEntity[] values = + _query.PrepareQuery(new[] {crit}, repo).Cast().ToArray(); + + values.Length.ShouldEqual(1); + values[0].Name.ShouldEqual("Foo"); + values[0].Age.ShouldEqual(35); + } + } + + public class QueryDefTestEntity + { + public string Name { get; set; } + public int Age { get; set; } + } +} \ No newline at end of file diff --git a/src/FluentNHibernate.Testing/DomainModel/Query/FilterTypeRegistryTester.cs b/src/FluentNHibernate.Testing/DomainModel/Query/FilterTypeRegistryTester.cs new file mode 100644 index 000000000..0f87ec832 --- /dev/null +++ b/src/FluentNHibernate.Testing/DomainModel/Query/FilterTypeRegistryTester.cs @@ -0,0 +1,29 @@ +using NUnit.Framework; +using ShadeTree.DomainModel.Query; + +namespace ShadeTree.Testing.DomainModel.Query +{ + [TestFixture] + public class FilterTypeRegistryTester + { + [SetUp] + public void SetUp() + { + FilterTypeRegistry.ResetAll(); + } + + [Test] + public void should_return_expected_filter_types_for_string_type() + { + var filters = FilterTypeRegistry.GetFiltersFor(); + filters.ShouldContain(x => x.Key == "STARTSWITH"); + } + + [Test] + public void should_return_expected_filter_types_for_int32_type() + { + var filters = FilterTypeRegistry.GetFiltersFor(); + filters.ShouldContain(x => x.Key == "EQUAL"); + } + } +} \ No newline at end of file diff --git a/src/FluentNHibernate.Testing/DomainModel/Query/FilterTypeTester.cs b/src/FluentNHibernate.Testing/DomainModel/Query/FilterTypeTester.cs new file mode 100644 index 000000000..c7521c46c --- /dev/null +++ b/src/FluentNHibernate.Testing/DomainModel/Query/FilterTypeTester.cs @@ -0,0 +1,61 @@ +using System; +using System.Linq.Expressions; +using NUnit.Framework; +using ShadeTree.DomainModel.Query; + +namespace ShadeTree.Testing.DomainModel.Query +{ + [TestFixture] + public class StringFilterTypeTester : FilterTypeSpec + { + [Test] + public void StringFilterType_should_generate_an_expression_that_calls_the_designated_string_method_on_the_value() + { + _filter.StringMethod = s => s.StartsWith(""); + ForMember(t=>t.Name).AndValue("Foo").TheResultExpression.ShouldEqual("Invoke(t => t.Name,target).StartsWith(\"Foo\")"); + } + } + + public class BinaryFilterTypeTester : FilterTypeSpec + { + [Test] + public void BinaryFilterType_should_generate_an_expression_that_calls_the_correct_operator_on_the_value() + { + _filter.FilterExpressionType = ExpressionType.GreaterThan; + ForMember(t => t.Age).AndValue(99).TheResultExpression.ShouldEqual("(Invoke(t => t.Age,target) > 99)"); + } + } + + public class FilterTypeSpec where FILTERTYPE : IFilterType, new() + { + protected FILTERTYPE _filter = new FILTERTYPE(); + private ConstantExpression _valueExpr; + private InvocationExpression _memberAccessExpr; + + public FilterTypeSpec ForMember(Expression> memberExpression) + { + _memberAccessExpr = Expression.Invoke(memberExpression, Expression.Parameter(typeof(ENTITYTYPE), "target")); + return this; + } + + public FilterTypeSpec AndValue(VALUE value) + { + _valueExpr = Expression.Constant(value); + return this; + } + + public string TheResultExpression + { + get + { + return _filter.GetExpression(_memberAccessExpr, _valueExpr).ToString(); + } + } + } + + public class FilterTestEntity + { + public string Name { get; set; } + public int Age { get; set; } + } +} \ No newline at end of file diff --git a/src/FluentNHibernate.Testing/Fixtures.cs b/src/FluentNHibernate.Testing/Fixtures.cs new file mode 100644 index 000000000..ae0e8a335 --- /dev/null +++ b/src/FluentNHibernate.Testing/Fixtures.cs @@ -0,0 +1,127 @@ +using fit; +using fitlibrary; +using ShadeTree.DomainModel.Fixtures; +using ShadeTree.Testing.DomainModel; +using StoryTeller.FixtureModel; +using System; + +namespace DomainFixtureGeneration +{ + + public partial class CaseFixture : DomainClassFixture + { + + public CaseFixture() : base() { } + public CaseFixture(Case subject) : base(subject) { } + + + [Example("|Number is|[value]|")] + public void NumberIs(Int64 propertyValue) + { + Subject.Number = propertyValue; + } + + [Example("|Check|Number|is|[value]|")] + public System.Int64 NumberIs() + { + return Subject.Number; + } + + + [Example("|Name is|[value]|")] + public void NameIs(String propertyValue) + { + Subject.Name = propertyValue; + } + + [Example("|Check|Name|is|[value]|")] + public System.String NameIs() + { + return Subject.Name; + } + + + [Example("|Id is|[value]|")] + public void IdIs(Int64 propertyValue) + { + Subject.Id = propertyValue; + } + + [Example("|Check|Id|is|[value]|")] + public System.Int64 IdIs() + { + return Subject.Id; + } + + } + + public partial class CaseListFixture : DomainListFixture + { + + public CaseListFixture() : base() { } + public CaseListFixture(Action doneAction) : base(doneAction) { } + + + public System.Int64 Number + { + set + { + subject.Number = value; + } + } + + public System.String Name + { + set + { + subject.Name = value; + } + } + + public System.Int64 Id + { + set + { + subject.Id = value; + } + } + } + + public partial class ContactFixture : DomainClassFixture + { + + public ContactFixture() : base() { } + public ContactFixture(Contact subject) : base(subject) { } + + + [Example("|Id is|[value]|")] + public void IdIs(Int64 propertyValue) + { + Subject.Id = propertyValue; + } + + [Example("|Check|Id|is|[value]|")] + public System.Int64 IdIs() + { + return Subject.Id; + } + + } + + public partial class ContactListFixture : DomainListFixture + { + + public ContactListFixture() : base() { } + public ContactListFixture(Action doneAction) : base(doneAction) { } + + + public System.Int64 Id + { + set + { + subject.Id = value; + } + } + } +} + diff --git a/src/FluentNHibernate.Testing/FluentNHibernate.Testing.csproj b/src/FluentNHibernate.Testing/FluentNHibernate.Testing.csproj new file mode 100644 index 000000000..7ca52d55e --- /dev/null +++ b/src/FluentNHibernate.Testing/FluentNHibernate.Testing.csproj @@ -0,0 +1,109 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {F5DC3221-827E-4CB4-B61C-5F50EB4D32EA} + Library + Properties + FluentNHibernate.Testing + FluentNHibernate.Testing + v3.5 + 512 + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + False + ..\..\tools\fit\fit.dll + + + False + ..\..\tools\NHibernate\NHibernate.dll + + + False + ..\..\tools\NHibernate\NHibernate.Linq.dll + + + False + ..\..\tools\nunit\nunit.framework.dll + + + False + ..\..\tools\rhino\Rhino.Mocks.dll + + + False + ..\..\tools\ShadeTree\ShadeTree.Core.dll + + + False + ..\..\tools\StructureMap\StructureMap.dll + + + + 3.5 + + + 3.5 + + + + + + + CommonAssemblyInfo.cs + + + + + + + + + + + + + + + + + + + + {1C988DFB-1EC5-484E-87D9-1D3C775BA435} + ShadeTree.DomainModel + + + + + + + + \ No newline at end of file diff --git a/src/FluentNHibernate.Testing/Properties/AssemblyInfo.cs b/src/FluentNHibernate.Testing/Properties/AssemblyInfo.cs new file mode 100644 index 000000000..3b2da68c2 --- /dev/null +++ b/src/FluentNHibernate.Testing/Properties/AssemblyInfo.cs @@ -0,0 +1,8 @@ +using System.Reflection; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. + +[assembly : AssemblyTitle("FluentNHibernate.Testing")] +[assembly : AssemblyDescription("")] \ No newline at end of file diff --git a/src/FluentNHibernate.Testing/SpecificationExtensions.cs b/src/FluentNHibernate.Testing/SpecificationExtensions.cs new file mode 100644 index 000000000..d98c6ada4 --- /dev/null +++ b/src/FluentNHibernate.Testing/SpecificationExtensions.cs @@ -0,0 +1,205 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Xml; +using NUnit.Framework; + +namespace ShadeTree.Testing +{ + public delegate void MethodThatThrows(); + + public static class SpecificationExtensions + { + public static void ShouldBeFalse(this bool condition) + { + Assert.IsFalse(condition); + } + + public static void ShouldBeTrue(this bool condition) + { + Assert.IsTrue(condition); + } + + public static object ShouldEqual(this object actual, object expected) + { + Assert.AreEqual(expected, actual); + return expected; + } + + public static object ShouldNotEqual(this object actual, object expected) + { + Assert.AreNotEqual(expected, actual); + return expected; + } + + public static void ShouldBeNull(this object anObject) + { + Assert.IsNull(anObject); + } + + public static void ShouldNotBeNull(this object anObject) + { + Assert.IsNotNull(anObject); + } + + public static object ShouldBeTheSameAs(this object actual, object expected) + { + Assert.AreSame(expected, actual); + return expected; + } + + public static object ShouldNotBeTheSameAs(this object actual, object expected) + { + Assert.AreNotSame(expected, actual); + return expected; + } + + public static void ShouldBeOfType(this object actual, Type expected) + { + Assert.IsInstanceOfType(expected, actual); + } + + public static void ShouldNotBeOfType(this object actual, Type expected) + { + Assert.IsNotInstanceOfType(expected, actual); + } + + public static void ShouldContain(this IList actual, object expected) + { + Assert.Contains(expected, actual); + } + + public static void ShouldContain(this IEnumerable actual, T expected) + { + ShouldContain(actual, x => x.Equals(expected)); + } + + public static void ShouldContain(this IEnumerable actual, Func expected) + { + actual.Single(expected).ShouldNotEqual(default(T)); + } + + public static void ShouldBeEmpty(this IEnumerable actual) + { + actual.Count().ShouldEqual(0); + } + + public static void ShouldHaveCount(this IEnumerable actual, int expected) + { + actual.Count().ShouldEqual(expected); + } + + public static IComparable ShouldBeGreaterThan(this IComparable arg1, IComparable arg2) + { + Assert.Greater(arg1, arg2); + return arg2; + } + + public static IComparable ShouldBeLessThan(this IComparable arg1, IComparable arg2) + { + Assert.Less(arg1, arg2); + return arg2; + } + + public static void ShouldBeEmpty(this ICollection collection) + { + Assert.IsEmpty(collection); + } + + public static void ShouldBeEmpty(this string aString) + { + Assert.IsEmpty(aString); + } + + public static void ShouldNotBeEmpty(this ICollection collection) + { + Assert.IsNotEmpty(collection); + } + + public static void ShouldNotBeEmpty(this string aString) + { + Assert.IsNotEmpty(aString); + } + + public static void ShouldContain(this string actual, string expected) + { + StringAssert.Contains(expected, actual); + } + + public static string ShouldBeEqualIgnoringCase(this string actual, string expected) + { + StringAssert.AreEqualIgnoringCase(expected, actual); + return expected; + } + + public static void ShouldEndWith(this string actual, string expected) + { + StringAssert.EndsWith(expected, actual); + } + + public static void ShouldStartWith(this string actual, string expected) + { + StringAssert.StartsWith(expected, actual); + } + + public static void ShouldContainErrorMessage(this Exception exception, string expected) + { + StringAssert.Contains(expected, exception.Message); + } + + public static Exception ShouldBeThrownBy(this Type exceptionType, MethodThatThrows method) + { + Exception exception = null; + + try + { + method(); + } + catch (Exception e) + { + Assert.AreEqual(exceptionType, e.GetType()); + exception = e; + } + + if (exception == null) + { + Assert.Fail(String.Format("Expected {0} to be thrown.", exceptionType.FullName)); + } + + return exception; + } + + public static void ShouldEqualSqlDate(this DateTime actual, DateTime expected) + { + TimeSpan timeSpan = actual - expected; + Assert.Less(Math.Abs(timeSpan.TotalMilliseconds), 3); + } + + public static object AttributeShouldEqual(this XmlElement element, string attributeName, object expected) + { + Assert.IsNotNull(element, "The Element is null"); + + string actual = element.GetAttribute(attributeName); + Assert.AreEqual(expected, actual); + return expected; + } + + public static XmlElement ShouldHaveChild(this XmlElement element, string xpath) + { + XmlElement child = element.SelectSingleNode(xpath) as XmlElement; + Assert.IsNotNull(child, "Should have a child element matching " + xpath); + + return child; + } + + public static XmlElement DoesNotHaveAttribute(this XmlElement element, string attributeName) + { + Assert.IsNotNull(element, "The Element is null"); + Assert.IsFalse(element.HasAttribute(attributeName), "Element should not have an attribute named " + attributeName); + + return element; + } + + } +} \ No newline at end of file diff --git a/src/FluentNHibernate.Testing/TestUtility.cs b/src/FluentNHibernate.Testing/TestUtility.cs new file mode 100644 index 000000000..1fb0f7479 --- /dev/null +++ b/src/FluentNHibernate.Testing/TestUtility.cs @@ -0,0 +1,18 @@ +using System; +using System.Reflection; + +namespace ShadeTree.Testing +{ + public static class TestUtility + { + public static void FireEvent(object control, string eventName, params object[] args) + { + MethodInfo minfo = + control.GetType().GetMethod("On" + eventName, + BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); + ParameterInfo[] param = minfo.GetParameters(); + Type parameterType = param[0].ParameterType; + minfo.Invoke(control, new[] {Activator.CreateInstance(parameterType)}); + } + } +} \ No newline at end of file diff --git a/src/FluentNHibernate.sln b/src/FluentNHibernate.sln new file mode 100644 index 000000000..71326062c --- /dev/null +++ b/src/FluentNHibernate.sln @@ -0,0 +1,25 @@ +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FluentNHibernate", "FluentNHibernate\FluentNHibernate.csproj", "{1C988DFB-1EC5-484E-87D9-1D3C775BA435}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FluentNHibernate.Testing", "FluentNHibernate.Testing\FluentNHibernate.Testing.csproj", "{F5DC3221-827E-4CB4-B61C-5F50EB4D32EA}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {1C988DFB-1EC5-484E-87D9-1D3C775BA435}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1C988DFB-1EC5-484E-87D9-1D3C775BA435}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1C988DFB-1EC5-484E-87D9-1D3C775BA435}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1C988DFB-1EC5-484E-87D9-1D3C775BA435}.Release|Any CPU.Build.0 = Release|Any CPU + {F5DC3221-827E-4CB4-B61C-5F50EB4D32EA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F5DC3221-827E-4CB4-B61C-5F50EB4D32EA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F5DC3221-827E-4CB4-B61C-5F50EB4D32EA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F5DC3221-827E-4CB4-B61C-5F50EB4D32EA}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/src/FluentNHibernate/AssemblyInfo.cs b/src/FluentNHibernate/AssemblyInfo.cs new file mode 100644 index 000000000..bc6ead63b --- /dev/null +++ b/src/FluentNHibernate/AssemblyInfo.cs @@ -0,0 +1,9 @@ +using System.Reflection; +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// + +[assembly : AssemblyTitle("StoryTeller.DomainModel")] +[assembly : AssemblyDescription("")] \ No newline at end of file diff --git a/src/FluentNHibernate/Conventions.cs b/src/FluentNHibernate/Conventions.cs new file mode 100644 index 000000000..240752e8f --- /dev/null +++ b/src/FluentNHibernate/Conventions.cs @@ -0,0 +1,96 @@ +using System; +using System.Collections.Generic; +using System.Reflection; +using ShadeTree.Core.Validation; +using ShadeTree.DomainModel.Mapping; +using ShadeTree.Validation; + +namespace ShadeTree.DomainModel +{ + public interface IPropertyConvention + { + void Process(IProperty property); + } + + public class AttributeConvention : IPropertyConvention where T : Attribute + { + private Action _action; + + public AttributeConvention(Action action) + { + _action = action; + } + + public void Process(IProperty property) + { + T att = Attribute.GetCustomAttribute(property.Property, typeof (T), true) as T; + if (att != null) + { + _action(att, property); + } + } + } + + public class Conventions + { + private readonly List _typeConventions = new List(); + private List _propertyConventions = new List(); + + public int DefaultStringLength { get; set; } + + public Conventions() + { + DefaultStringLength = 100; + + AddTypeConvention(new IgnoreNullableTypeConvention()); + AddTypeConvention(new EnumerationTypeConvention()); + + ForAttribute((att, prop) => + { + if (prop.ParentIsRequired) + { + prop.SetAttributeOnPropertyElement("not-null", "true"); + } + }); + + ForAttribute((att, prop) => prop.SetAttributeOnPropertyElement("length", att.Length.ToString())); + ForAttribute((att, prop) => prop.SetAttributeOnColumnElement("unique", "true")); + } + + public Func GetForeignKeyName = prop => prop.Name + "_id"; + public Func GetForeignKeyNameOfParent = type => type.Name + "_id"; + + public Func GetManyToManyTableName = + (child, parent) => child.Name + "To" + parent.Name; + + public void AddTypeConvention(ITypeConvention convention) + { + _typeConventions.Add(convention); + } + + public ITypeConvention FindConvention(Type propertyType) + { + var find = _typeConventions.Find(c => c.CanHandle(propertyType)); + return find ?? new DefaultConvention(); + } + + public void AlterMap(IProperty property) + { + if (property.PropertyType == typeof(string)) + { + property.SetAttributeOnPropertyElement("length", DefaultStringLength.ToString()); + } + + ITypeConvention convention = FindConvention(property.PropertyType); + convention.AlterMap(property); + + _propertyConventions.ForEach(c => c.Process(property)); + } + + public void ForAttribute(Action action) where T : Attribute + { + AttributeConvention convention = new AttributeConvention(action); + _propertyConventions.Add(convention); + } + } +} \ No newline at end of file diff --git a/src/FluentNHibernate/Entity.cs b/src/FluentNHibernate/Entity.cs new file mode 100644 index 000000000..a82f696ff --- /dev/null +++ b/src/FluentNHibernate/Entity.cs @@ -0,0 +1,41 @@ +using System; + +namespace ShadeTree.DomainModel +{ + [Serializable] + public class Entity : IEquatable + { + public long Id { get; set; } + + public virtual bool Equals(Entity obj) + { + if (ReferenceEquals(null, obj)) return false; + if (ReferenceEquals(this, obj)) return true; + if (GetType() != obj.GetType()) return false; + return obj.Id == Id; + } + + public override bool Equals(object obj) + { + if (ReferenceEquals(null, obj)) return false; + if (ReferenceEquals(this, obj)) return true; + if (GetType() != obj.GetType()) return false; + return Equals((Entity) obj); + } + + public override int GetHashCode() + { + return Id.GetHashCode(); + } + + public static bool operator ==(Entity left, Entity right) + { + return Equals(left, right); + } + + public static bool operator !=(Entity left, Entity right) + { + return !Equals(left, right); + } + } +} diff --git a/src/FluentNHibernate/Fixtures/DomainClassFixture.cs b/src/FluentNHibernate/Fixtures/DomainClassFixture.cs new file mode 100644 index 000000000..97bace5bf --- /dev/null +++ b/src/FluentNHibernate/Fixtures/DomainClassFixture.cs @@ -0,0 +1,154 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using fit; +using fitlibrary; +using ShadeTree.Validation; +using StoryTeller.FixtureModel; +using ObjectFactory=StructureMap.ObjectFactory; + +namespace ShadeTree.DomainModel.Fixtures +{ + public class GenericRowFixture : RowFixture where T : class + { + private T[] _array; + + public GenericRowFixture(T[] array) + { + _array = array; + } + + public override object[] Query() + { + return _array; + } + + public override Type GetTargetClass() + { + return typeof(T); + } + } + + public class DomainClassFixture : DoFixture where T : Entity, new() + { + private T _subject; + private Action _onFinished = t => { }; + + + + public DomainClassFixture() + { + _subject = new T(); + } + + public DomainClassFixture(T subject) + { + _subject = subject; + } + + [Example("|Find|[id]|")] + public void Find(long id) + { + IRepository repository = ObjectFactory.GetInstance(); + _subject = repository.Find(id); + + if (_subject == null) + { + string message = string.Format("Could not find {0}.Id = {1}", typeof (T).Name, id); + throw new ApplicationException(message); + } + } + + [Example("|Find by alias|[alias]|")] + public void FindByAlias(string alias) + { + long id = TestContext.GetValue(alias); + Find(id); + } + + [Example("|Save as alias|[alias]|")] + public void SaveAsAlias(string alias) + { + IRepository repository = ObjectFactory.GetInstance(); + repository.Save(_subject); + + TestContext.StoreAlias(alias, _subject.Id); + } + + + public Action OnFinished + { + get { return _onFinished; } + set { _onFinished = value; } + } + + public override void DoRows(Parse theRows) + { + base.DoRows(theRows); + _onFinished(Subject); + } + + public T Subject + { + get { return _subject; } + } + + + [Example("|There are no validation messages for|[fieldName]|")] + public bool ThereAreNoValidationMessagesFor(string fieldName) + { + return Validator.ValidateField(Subject, fieldName).Length == 0; + } + + [Example(@"|The Validation Messages For|[fieldName]|are| +|Message| +|[message]|")] + public Fixture TheValidationMessagesForAre(string fieldName) + { + NotificationMessage[] messages = Validator.ValidateField(Subject, fieldName); + return new GenericRowFixture(messages); + } + + [Example("|The Validation Messages For|[fieldName]|contains|[message]|")] + public bool TheValidationMessagesForContains(string fieldName, string message) + { + NotificationMessage[] messages = Validator.ValidateField(Subject, fieldName); + bool correct = Array.Find(messages, m => m.Message == message) != null; + + if (!correct) + { + throwErrorMessagesAreWrong(messages); + } + + return true; + } + + private void throwErrorMessagesAreWrong(NotificationMessage[] messages) + { + string errorMessage = "\n\nWrong messages!"; + foreach (NotificationMessage notificationMessage in messages) + { + errorMessage += "\n" + notificationMessage.ToString(); + } + + errorMessage += "\n\n\n"; + + throw new ApplicationException(errorMessage); + } + + [Example("|The Validation Messages For|[fieldName]|does not contain|[message]|")] + public bool TheValidationMessagesForDoesNotContain(string fieldName, string message) + { + NotificationMessage[] messages = Validator.ValidateField(Subject, fieldName); + bool correct = Array.Find(messages, m => m.Message == message) == null; + + if (!correct) + { + throwErrorMessagesAreWrong(messages); + } + + return true; + } + } +} \ No newline at end of file diff --git a/src/FluentNHibernate/Fixtures/DomainFixtureWatcher.cs b/src/FluentNHibernate/Fixtures/DomainFixtureWatcher.cs new file mode 100644 index 000000000..271840ba7 --- /dev/null +++ b/src/FluentNHibernate/Fixtures/DomainFixtureWatcher.cs @@ -0,0 +1,59 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace ShadeTree.DomainModel.Fixtures +{ + public static class DomainFixtureWatcher + { + private static List> list = new List>(); + private static Dictionary> actionsByType = new Dictionary>(); + + public static Action LoadingList = t => { }; + + public static void RegisterListener(Action action) + { + list.Add(action); + } + + public static void RegisterListenerForType(Action action) + { + List actionList; + + if (!actionsByType.TryGetValue(typeof(T), out actionList)) + { + actionList = new List(); + actionsByType.Add(typeof(T), actionList); + } + + actionList.Add(action); + } + + public static void Added(object target) + { + foreach (var action in list) + { + action(target); + } + + if (target != null) + { + List actions; + + if (actionsByType.TryGetValue(target.GetType(), out actions)) + { + foreach (Delegate action in actions) + { + action.DynamicInvoke(target); + } + } + } + } + + public static void LoadingListOfType() + { + LoadingList(typeof (T)); + } + } +} \ No newline at end of file diff --git a/src/FluentNHibernate/Fixtures/DomainListFixture.cs b/src/FluentNHibernate/Fixtures/DomainListFixture.cs new file mode 100644 index 000000000..6fdfbb1d2 --- /dev/null +++ b/src/FluentNHibernate/Fixtures/DomainListFixture.cs @@ -0,0 +1,60 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Text; +using fit; +using ShadeTree.DomainModel.Fixtures; + +namespace ShadeTree.DomainModel.Fixtures +{ + public class DomainListFixture : ColumnFixture where T : new() + { + private readonly List _instances = new List(); + protected T subject; + private readonly Action _doneAction = array => { }; + + + public DomainListFixture() + { + try + { + DomainFixtureWatcher.LoadingListOfType(); + } + catch (Exception e) + { + Debug.WriteLine(e.ToString()); + throw; + } + } + + + public DomainListFixture(Action doneAction) + { + _doneAction = doneAction; + } + + public T[] Instances + { + get { return _instances.ToArray(); } + } + + public override void Reset() + { + subject = new T(); + } + + public override void Execute() + { + _instances.Add(subject); + DomainFixtureWatcher.Added(subject); + } + + + public override void DoRows(Parse rows) + { + base.DoRows(rows); + _doneAction(_instances.ToArray()); + } + } +} \ No newline at end of file diff --git a/src/FluentNHibernate/Fixtures/DomainObjectFinder.cs b/src/FluentNHibernate/Fixtures/DomainObjectFinder.cs new file mode 100644 index 000000000..f1f28a4dc --- /dev/null +++ b/src/FluentNHibernate/Fixtures/DomainObjectFinder.cs @@ -0,0 +1,70 @@ +using System; +using System.Linq.Expressions; +using ShadeTree.Core; +using StructureMap; + +namespace ShadeTree.DomainModel.Fixtures +{ + public delegate T FinderDelegate(R repository, string key); + + public static class DomainObjectFinder + { + private static readonly Cache _finders = new Cache(); + + public static void ClearAllFinders() + { + _finders.ClearAll(); + } + + public static T Find(string key) + { + var finder = (Func) _finders.Get(typeof (T)); + return finder(key); + } + + public static TypeFinderExpression Type() where T : class + { + return new TypeFinderExpression(_finders); + } + } + + public class TypeFinderExpression where T : class + { + private readonly Cache _finders; + + internal TypeFinderExpression(Cache finders) + { + _finders = finders; + } + + public void IsFoundBy(Func func) + { + _finders.Store(typeof (T), func); + } + + public void IsFoundBy(Func>> func) + { + Func wrapped = s => + { + var repository = ObjectFactory.GetInstance(); + var expression = func(s); + return repository.FindBy(expression); + }; + + IsFoundBy(wrapped); + } + + public void IsFoundByProperty(Expression> expression) + { + Func function = key => + { + var repository = ObjectFactory.GetInstance(); + return repository.FindBy(expression, key); + }; + + IsFoundBy(function); + } + + + } +} \ No newline at end of file diff --git a/src/FluentNHibernate/Fixtures/ExampleAttribute.cs b/src/FluentNHibernate/Fixtures/ExampleAttribute.cs new file mode 100644 index 000000000..0657c539a --- /dev/null +++ b/src/FluentNHibernate/Fixtures/ExampleAttribute.cs @@ -0,0 +1,33 @@ +using System; +using System.Collections.Generic; +using System.Reflection; +using System.Text; + +namespace StoryTeller.FixtureModel +{ + /// + /// Imported from StoryTeller project, as this was the only dependency there. + /// + [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class)] + public class ExampleAttribute : Attribute + { + private readonly string _example; + + public ExampleAttribute(string example) + { + _example = example; + } + + + public string Example + { + get { return _example; } + } + + public static string GetExample(MethodInfo method, string defaultText) + { + ExampleAttribute attribute = Attribute.GetCustomAttribute(method, typeof (ExampleAttribute)) as ExampleAttribute; + return attribute == null ? defaultText : attribute.Example; + } + } +} diff --git a/src/FluentNHibernate/Fixtures/TestContext.cs b/src/FluentNHibernate/Fixtures/TestContext.cs new file mode 100644 index 000000000..5694a9795 --- /dev/null +++ b/src/FluentNHibernate/Fixtures/TestContext.cs @@ -0,0 +1,19 @@ +using ShadeTree.Core; + +namespace ShadeTree.DomainModel.Fixtures +{ + public static class TestContext + { + private static Cache _aliases = new Cache(); + + public static void StoreAlias(string key, object value) + { + _aliases.Store(key, value); + } + + public static T GetValue(string key) + { + return (T)_aliases.Get(key); + } + } +} diff --git a/src/FluentNHibernate/FluentNHibernate.csproj b/src/FluentNHibernate/FluentNHibernate.csproj new file mode 100644 index 000000000..dc0c5f67b --- /dev/null +++ b/src/FluentNHibernate/FluentNHibernate.csproj @@ -0,0 +1,132 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {1C988DFB-1EC5-484E-87D9-1D3C775BA435} + Library + Properties + FluentNHibernate + FluentNHibernate + v3.5 + 512 + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + False + ..\..\tools\fit\fit.dll + + + False + ..\..\tools\NHibernate\NHibernate.dll + + + False + ..\..\tools\NHibernate\NHibernate.Linq.dll + + + False + ..\..\tools\ShadeTree\ShadeTree.Core.dll + + + False + ..\..\tools\StructureMap\StructureMap.dll + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + CommonAssemblyInfo.cs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/FluentNHibernate/Generation/CodeFile.cs b/src/FluentNHibernate/Generation/CodeFile.cs new file mode 100644 index 000000000..fdc6f4361 --- /dev/null +++ b/src/FluentNHibernate/Generation/CodeFile.cs @@ -0,0 +1,170 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Reflection; +using System.Text; +using fit; +using fitlibrary; +using ShadeTree.DomainModel.Fixtures; + +namespace ShadeTree.DomainModel.Generation +{ + public class FixtureFileDefinition + { + private PropertyBuilder _propertyBuilder; + public string FilePath { get; set; } + public string Namespace { get; set; } + public Assembly Assembly {get; set;} + public Func TypeFilter { get; set; } + + public PropertyBuilder PropertyBuilder + { + get { return _propertyBuilder; } + } + + public FixtureFileDefinition() + { + _propertyBuilder = new PropertyBuilder(); + } + + public void GenerateFile() + { + CodeFile file = new CodeFile(FilePath, Namespace); + + file.AddNamespace(typeof(DoFixture)); + file.AddNamespace(typeof(Fixture)); + file.AddNamespace(typeof(StoryTeller.FixtureModel.ExampleAttribute)); + file.AddNamespace(typeof(DomainFixture)); + file.AddNamespace(typeof(DomainClassFixture<>)); + + file.PropertyBuilder = _propertyBuilder; + + foreach (Type exportedType in Assembly.GetExportedTypes()) + { + if (exportedType.IsAbstract || exportedType.IsInterface) continue; + + if (TypeFilter(exportedType)) + { + file.AddDomainType(exportedType); + } + } + + file.WriteToFile(); + } + } + + public class CodeFile + { + private readonly List _namespaces = new List(); + private string _fileName; + private readonly string _nameSpace; + private List _fixtures = new List(); + private PropertyBuilder _propertyBuilder = new PropertyBuilder(); + + public CodeFile(string fileName, string nameSpace) + { + _fileName = fileName; + _nameSpace = nameSpace; + + } + + public PropertyBuilder PropertyBuilder + { + get { return _propertyBuilder; } + set { _propertyBuilder = value; } + } + + public void AddNamespace(string namespaceName) + { + if (namespaceName == this.GetType().Namespace) + { + return; + } + + if (!_namespaces.Contains(namespaceName)) + { + _namespaces.Add(namespaceName); + } + } + + public void AddNamespace(Type type) + { + AddNamespace(type.Namespace); + foreach (PropertyInfo property in type.GetProperties()) + { + AddNamespace(property.PropertyType.Namespace); + } + } + + public void AddDomainType() + { + Type type = typeof(T); + AddDomainType(type); + } + + public void AddDomainType(Type type) + { + AddNamespace(type); + DomainFixture fixture = new DomainFixture(type, _propertyBuilder); + _fixtures.Add(fixture); + } + + public void AddWriteable(IWriteable writeable) + { + var withTypes = writeable as IWriteableWithTypes; + if (withTypes != null) withTypes.RegisterTypes(AddNamespace); + + _fixtures.Add(writeable); + } + + public void WriteToConsole() + { + StringBuilder sb = new StringBuilder(); + StringWriter writer = new StringWriter(sb); + + writeAll(writer); + + Console.WriteLine(sb.ToString()); + } + + public string Write() + { + StringBuilder sb = new StringBuilder(); + StringWriter writer = new StringWriter(sb); + + writeAll(writer); + + return sb.ToString(); + } + + private void writeAll(TextWriter writer) + { + _namespaces.Sort(); + foreach (string namespaceName in _namespaces) + { + writer.WriteLine("using {0};", namespaceName); + } + + writer.WriteLine(); + writer.WriteLine("namespace {0}", _nameSpace); + writer.WriteLine("{"); + + foreach (var fixture in _fixtures) + { + fixture.Write(writer); + writer.WriteLine(); + } + + writer.WriteLine("}"); + } + + public void WriteToFile() + { + Console.WriteLine("Writing file " + _fileName); + using (StreamWriter writer = new StreamWriter(_fileName, false)) + { + writeAll(writer); + } + } + } +} \ No newline at end of file diff --git a/src/FluentNHibernate/Generation/DomainFixture.cs b/src/FluentNHibernate/Generation/DomainFixture.cs new file mode 100644 index 000000000..150cd0735 --- /dev/null +++ b/src/FluentNHibernate/Generation/DomainFixture.cs @@ -0,0 +1,85 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.IO; +using System.Reflection; +using ICollection=System.Collections.ICollection; + +namespace ShadeTree.DomainModel.Generation +{ + public interface IWriteableWithTypes : IWriteable + { + void RegisterTypes(Action action); + } + + public interface IWriteable + { + void Write(TextWriter writer); + } + + public class DomainFixture : IWriteable + { + private readonly Type _type; + private readonly List _properties = new List(); + + public DomainFixture(Type type, PropertyBuilder builder) + { + _type = type; + + foreach (PropertyInfo property in _type.GetProperties()) + { + IProperty prop = builder.Build(property); + _properties.Add(prop); + } + } + + + public void Write(TextWriter writer) + { + writeTheInstanceFixture(writer); + writeTheListFixture(writer); + } + + private void writeTheListFixture(TextWriter writer) + { + + + writer.WriteLine(); + writer.WriteLine("\tpublic partial class {0}ListFixture : DomainListFixture<{0}>", _type.Name); + writer.WriteLine("\t{"); + + writer.WriteLine(); + writer.WriteLine("\t\tpublic {0}ListFixture() : base(){{}}", _type.Name); + writer.WriteLine("\t\tpublic {0}ListFixture(Action<{0}[]> doneAction) : base(doneAction){{}}", _type.Name); + writer.WriteLine(); + + foreach (IProperty property in _properties) + { + property.WritePropertiesForListFixture(writer); + } + + + writer.WriteLine("\t}"); + } + + private void writeTheInstanceFixture(TextWriter writer) + { + writer.WriteLine(); + writer.WriteLine("\tpublic partial class {0}Fixture : DomainClassFixture<{0}>", _type.Name); + writer.WriteLine("\t{"); + + writer.WriteLine(); + writer.WriteLine("\t\tpublic {0}Fixture() : base(){{}}", _type.Name); + writer.WriteLine("\t\tpublic {0}Fixture({0} subject) : base(subject){{}}", _type.Name); + writer.WriteLine(); + + foreach (IProperty property in _properties) + { + property.WritePropertiesForDomainClassFixture(writer); + } + + + writer.WriteLine("\t}"); + } + } +} \ No newline at end of file diff --git a/src/FluentNHibernate/Generation/DomainProperty.cs b/src/FluentNHibernate/Generation/DomainProperty.cs new file mode 100644 index 000000000..a52f0d64a --- /dev/null +++ b/src/FluentNHibernate/Generation/DomainProperty.cs @@ -0,0 +1,58 @@ +using System.IO; +using System.Reflection; + +namespace ShadeTree.DomainModel.Generation +{ + public class DomainProperty : IProperty + { + private PropertyInfo _property; + + public DomainProperty() + { + } + + #region IProperty Members + + public void WritePropertiesForDomainClassFixture(TextWriter writer) + { + if (!_property.CanWrite) + { + return; + } + + writer.WriteLine(); + writer.WriteLine("\t\t[Example(\"|{0} is|[value]|\")]", _property.Name); + writer.WriteLine("\t\tpublic void {0}Is(string propertyValue)", _property.Name); + writer.WriteLine("\t\t{"); + writer.WriteLine("\t\t\tSubject.{0} = DomainObjectFinder.Find<{1}>(propertyValue);", _property.Name, + _property.PropertyType.FullName); + writer.WriteLine("\t\t}"); + } + + + public void WritePropertiesForListFixture(TextWriter writer) + { + if (!_property.CanWrite) + { + return; + } + + writer.WriteLine(); + writer.WriteLine("\t\tpublic string {0}", _property.Name); + writer.WriteLine("\t\t{"); + writer.WriteLine("\t\t\tset"); + writer.WriteLine("\t\t\t{"); + writer.WriteLine("\t\t\t\tsubject.{0} = DomainObjectFinder.Find<{1}>(value);", _property.Name, + _property.PropertyType.FullName); + writer.WriteLine("\t\t\t}"); + writer.WriteLine("\t\t}"); + } + + public PropertyInfo Property + { + set { _property = value; } + } + + #endregion + } +} \ No newline at end of file diff --git a/src/FluentNHibernate/Generation/GenericSimpleProperty.cs b/src/FluentNHibernate/Generation/GenericSimpleProperty.cs new file mode 100644 index 000000000..43cfeda2c --- /dev/null +++ b/src/FluentNHibernate/Generation/GenericSimpleProperty.cs @@ -0,0 +1,83 @@ +using System; +using System.IO; +using System.Reflection; + +namespace ShadeTree.DomainModel.Generation +{ + public class GenericSimpleProperty : IProperty + { + private PropertyInfo _property; + private Type _propertyType; + + public GenericSimpleProperty() + { + } + + #region IProperty Members + + public void WritePropertiesForDomainClassFixture(TextWriter writer) + { + if (_property.CanWrite) + { + writer.WriteLine(); + writer.WriteLine("\t\t[Example(\"|{0} is|[value]|\")]", _property.Name); + writer.WriteLine("\t\tpublic void {0}Is({1}? propertyValue)", _property.Name, _propertyType.Name); + writer.WriteLine("\t\t{"); + writer.WriteLine("\t\t\tSubject.{0} = propertyValue;", _property.Name); + writer.WriteLine("\t\t}"); + + writer.WriteLine(); + writer.WriteLine("\t\t[Example(\"|{0} is null|\")]", _property.Name); + writer.WriteLine("\t\tpublic void {0}IsNull()", _property.Name); + writer.WriteLine("\t\t{"); + writer.WriteLine("\t\t\tSubject.{0} = null;", _property.Name); + writer.WriteLine("\t\t}"); + } + + writer.WriteLine(); + writer.WriteLine("\t\t[Example(\"|Check|{0} is|[value]|\")]", _property.Name); + writer.WriteLine("\t\tpublic {0} {1}Is()", _propertyType, _property.Name); + writer.WriteLine("\t\t{"); + writer.WriteLine("\t\t\treturn Subject.{0}.Value;", _property.Name); + writer.WriteLine("\t\t}"); + writer.WriteLine(); + + writer.WriteLine(); + writer.WriteLine("\t\t[Example(\"|Check|that {0} is null|\")]", _property.Name); + writer.WriteLine("\t\tpublic bool That{0}IsNull()", _property.Name); + writer.WriteLine("\t\t{"); + writer.WriteLine("\t\t\treturn !Subject.{0}.HasValue;", _property.Name); + writer.WriteLine("\t\t}"); + } + + + public void WritePropertiesForListFixture(TextWriter writer) + { + if (!_property.CanWrite) + { + return; + } + + writer.WriteLine(); + writer.WriteLine("\t\tpublic {0}? {1}", _propertyType.FullName, _property.Name); + writer.WriteLine("\t\t{"); + writer.WriteLine("\t\t\tset"); + writer.WriteLine("\t\t\t{"); + writer.WriteLine("\t\t\t\tsubject.{0} = value;", _property.Name); + writer.WriteLine("\t\t\t}"); + writer.WriteLine("\t\t}"); + } + + public PropertyInfo Property + { + set + { + _property = value; + _propertyType = value.PropertyType.GetGenericArguments()[0]; + ; + } + } + + #endregion + } +} \ No newline at end of file diff --git a/src/FluentNHibernate/Generation/IProperty.cs b/src/FluentNHibernate/Generation/IProperty.cs new file mode 100644 index 000000000..e73dbbf6e --- /dev/null +++ b/src/FluentNHibernate/Generation/IProperty.cs @@ -0,0 +1,35 @@ +using System.IO; +using System.Reflection; + +namespace ShadeTree.DomainModel.Generation +{ + public interface IProperty + { + PropertyInfo Property { set; } + void WritePropertiesForDomainClassFixture(TextWriter writer); + void WritePropertiesForListFixture(TextWriter writer); + } + + public class NulloProperty : IProperty + { + #region IProperty Members + + public void WritePropertiesForDomainClassFixture(TextWriter writer) + { + } + + public void WritePropertiesForListFixture(TextWriter writer) + { + } + + public PropertyInfo Property + { + set + { + // no-op; + } + } + + #endregion + } +} \ No newline at end of file diff --git a/src/FluentNHibernate/Generation/PropertyBuilder.cs b/src/FluentNHibernate/Generation/PropertyBuilder.cs new file mode 100644 index 000000000..7fced9091 --- /dev/null +++ b/src/FluentNHibernate/Generation/PropertyBuilder.cs @@ -0,0 +1,89 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Reflection; + + +namespace ShadeTree.DomainModel.Generation +{ + public class PropertyBuilder + { + private IPropertyTypeBuilder _builder = new PropertyTypeBuilder(t => true); + + public PropertyBuilder() + { + Return(isSingleClassProperty); + Return(isGenericAndPrimitive); + Return(isPrimitive); + } + + public IProperty Build(PropertyInfo property) + { + return _builder.Build(property); + } + + public void Return(Func matches) where T : IProperty, new() + { + PropertyTypeBuilder builder = new PropertyTypeBuilder(matches); + builder.Next = _builder; + _builder = builder; + } + + private static bool isGenericAndPrimitive(PropertyInfo property) + { + return + property.PropertyType.IsGenericType && + property.PropertyType.GetGenericTypeDefinition() == typeof(Nullable<>); + } + + private static bool isPrimitive(PropertyInfo property) + { + return property.PropertyType.IsPrimitive || property.PropertyType.Equals(typeof(string)) || property.PropertyType.Equals(typeof(DateTime)) || property.PropertyType.IsEnum; + } + + private static bool isSingleClassProperty(PropertyInfo property) + { + if (property.PropertyType.IsGenericType) + { + Type definition = property.PropertyType.GetGenericTypeDefinition(); + if (typeof(IList<>).IsAssignableFrom(definition)) + { + return false; + } + } + + return !typeof(ICollection).IsAssignableFrom(property.PropertyType) && !typeof(IList).IsAssignableFrom(property.PropertyType); + } + + public interface IPropertyTypeBuilder + { + IProperty Build(PropertyInfo property); + } + + public class PropertyTypeBuilder : IPropertyTypeBuilder where T : IProperty, new() + { + private Func _matches; + + + public PropertyTypeBuilder(Func matches) + { + _matches = matches; + } + + public IProperty Build(PropertyInfo property) + { + if (_matches(property)) + { + IProperty prop = new T(); + prop.Property = property; + + return prop; + } + + return Next.Build(property); + } + + public IPropertyTypeBuilder Next { get; set; } + } + } +} diff --git a/src/FluentNHibernate/Generation/SimpleProperty.cs b/src/FluentNHibernate/Generation/SimpleProperty.cs new file mode 100644 index 000000000..dfc3d170a --- /dev/null +++ b/src/FluentNHibernate/Generation/SimpleProperty.cs @@ -0,0 +1,63 @@ +using System.IO; +using System.Reflection; + +namespace ShadeTree.DomainModel.Generation +{ + public class SimpleProperty : IProperty + { + private PropertyInfo _property; + + public SimpleProperty() + { + } + + + + + public void WritePropertiesForDomainClassFixture(TextWriter writer) + { + if (_property.CanWrite) + { + writer.WriteLine(); + writer.WriteLine("\t\t[Example(\"|{0} is|[value]|\")]", _property.Name); + writer.WriteLine("\t\tpublic void {0}Is({1} propertyValue)", _property.Name, _property.PropertyType.Name); + writer.WriteLine("\t\t{"); + writer.WriteLine("\t\t\tSubject.{0} = propertyValue;", _property.Name); + writer.WriteLine("\t\t}"); + } + + writer.WriteLine(); + writer.WriteLine("\t\t[Example(\"|Check|{0} is|[value]|\")]", _property.Name); + writer.WriteLine("\t\tpublic {0} {1}Is()", _property.PropertyType, _property.Name); + writer.WriteLine("\t\t{"); + writer.WriteLine("\t\t\treturn Subject.{0};", _property.Name); + writer.WriteLine("\t\t}"); + writer.WriteLine(); + } + + + public void WritePropertiesForListFixture(TextWriter writer) + { + if (!_property.CanWrite) + { + return; + } + + + writer.WriteLine(); + writer.WriteLine("\t\tpublic {0} {1}", _property.PropertyType.FullName, _property.Name); + writer.WriteLine("\t\t{"); + writer.WriteLine("\t\t\tset"); + writer.WriteLine("\t\t\t{"); + writer.WriteLine("\t\t\t\tsubject.{0} = value;", _property.Name, + _property.PropertyType.FullName); + writer.WriteLine("\t\t\t}"); + writer.WriteLine("\t\t}"); + } + + public PropertyInfo Property + { + set { _property = value; } + } + } +} \ No newline at end of file diff --git a/src/FluentNHibernate/IMappingVisitor.cs b/src/FluentNHibernate/IMappingVisitor.cs new file mode 100644 index 000000000..f1743d86c --- /dev/null +++ b/src/FluentNHibernate/IMappingVisitor.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Xml; + +namespace ShadeTree.DomainModel +{ + public interface IMappingVisitor + { + Conventions Conventions { get;} + Type CurrentType { get; set; } + void AddMappingDocument(XmlDocument document, Type type); + void RegisterDependency(Type parentType); + } +} diff --git a/src/FluentNHibernate/IRepository.cs b/src/FluentNHibernate/IRepository.cs new file mode 100644 index 000000000..41a666b94 --- /dev/null +++ b/src/FluentNHibernate/IRepository.cs @@ -0,0 +1,96 @@ +using System; +using System.Linq; +using System.Linq.Expressions; +using NHibernate; +using NHibernate.Criterion; +using NHibernate.Linq; +using ShadeTree.Core; +using StructureMap; +using Action=System.Action; + +namespace ShadeTree.DomainModel +{ + public interface IRepository + { + T Find(long id) where T : Entity; + void Delete(T target); + T[] Query(Expression> where); + T FindBy(Expression> expression, U search) where T : class; + T FindBy(Expression> where); + void Save(T target); + } + + public class Repository : IRepository + { + private readonly ISession _session; + + [DefaultConstructor] + public Repository(ISessionSource source) : this(source.CreateSession()) + { + + } + + + public Repository(ISession session) + { + _session = session; + _session.FlushMode = FlushMode.Commit; + } + + #region IRepository Members + + private void withinTransaction(Action action) + { + ITransaction transaction = _session.BeginTransaction(); + try + { + action(); + transaction.Commit(); + } + catch (Exception) + { + // Do something here? + transaction.Rollback(); + throw; + } + finally + { + transaction.Dispose(); + } + } + + public T Find(long id) where T : Entity + { + return _session.Get(id); + } + + public void Delete(T target) + { + withinTransaction(() => _session.Delete(target)); + } + + public T[] Query(Expression> where) + { + return _session.Linq().Where(where).ToArray(); + } + + #endregion + + public void Save(T target) + { + withinTransaction(() => _session.SaveOrUpdate(target)); + } + + public T FindBy(Expression> expression, U search) where T : class + { + string propertyName = ReflectionHelper.GetProperty(expression).Name; + var criteria = _session.CreateCriteria(typeof (T)).Add(Restrictions.Eq(propertyName, search)); + return criteria.UniqueResult() as T; + } + + public T FindBy(Expression> where) + { + return _session.Linq().First(where); + } + } +} \ No newline at end of file diff --git a/src/FluentNHibernate/InMemoryRepository.cs b/src/FluentNHibernate/InMemoryRepository.cs new file mode 100644 index 000000000..eceda1828 --- /dev/null +++ b/src/FluentNHibernate/InMemoryRepository.cs @@ -0,0 +1,68 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq.Expressions; +using System.Reflection; +using ShadeTree.Core; +using System.Linq; + +namespace ShadeTree.DomainModel +{ + public class InMemoryRepository : IRepository + { + private readonly Cache _types; + + public InMemoryRepository() + { + _types = new Cache(type => + { + Type listType = typeof (List<>).MakeGenericType(type); + return Activator.CreateInstance(listType); + }); + } + + private IList listFor() + { + return (IList) _types.Get(typeof (T)); + } + + public T Find(long id) where T : Entity + { + return listFor().First(t => t.Id == id); + } + + public void Delete(T target) + { + listFor().Remove(target); + } + + public T[] Query(Expression> where) + { + var query = from item in listFor() select item; + return query.Where(where.Compile()).ToArray(); + } + + public T FindBy(Expression> expression, U search) where T : class + { + PropertyInfo accessor = ReflectionHelper.GetProperty(expression); + Func predicate = t => + { + U actual = (U) accessor.GetValue(t, null); + return search.Equals(actual); + }; + + return listFor().First(predicate); + } + + public T FindBy(Expression> where) + { + var query = from item in listFor() select item; + return query.First(where.Compile()); + } + + public void Save(T target) + { + listFor().Add(target); + } + } +} \ No newline at end of file diff --git a/src/FluentNHibernate/Mapping/ClassMap.cs b/src/FluentNHibernate/Mapping/ClassMap.cs new file mode 100644 index 000000000..61a0e4bf2 --- /dev/null +++ b/src/FluentNHibernate/Mapping/ClassMap.cs @@ -0,0 +1,93 @@ +using System; +using System.Diagnostics; +using System.IO; +using System.Linq.Expressions; +using System.Reflection; +using System.Xml; +using ShadeTree.Core; + +namespace ShadeTree.DomainModel.Mapping +{ + public class ClassMap : ClassMapBase, IMapping + { + public ClassMap() + { + TableName = typeof (T).Name; + } + + public string TableName { get; set; } + + public XmlDocument CreateMapping(IMappingVisitor visitor) + { + visitor.CurrentType = typeof(T); + XmlDocument document = getBaseDocument(); + setHeaderValues(document); + XmlElement classElement = createClassValues(document, document.DocumentElement); + + writeTheParts(classElement, visitor); + + return document; + } + + public void UseIdentityForKey(Expression> expression, string columnName) + { + PropertyInfo property = ReflectionHelper.GetProperty(expression); + var part = new IdentityPart(property, columnName); + + _properties.Insert(0, part); + } + + protected virtual XmlElement createClassValues(XmlDocument document, XmlNode parentNode) + { + return parentNode.AddElement("class") + .WithAtt("name", typeof (T).Name) + .WithAtt("table", TableName) + .WithAtt("xmlns", "urn:nhibernate-mapping-2.2"); + } + + private void setHeaderValues(XmlDocument document) + { + document.DocumentElement.SetAttribute("assembly", typeof (T).Assembly.GetName().Name); + document.DocumentElement.SetAttribute("namespace", typeof (T).Namespace); + } + + private static XmlDocument getBaseDocument() + { + Assembly executingAssembly = Assembly.GetExecutingAssembly(); + Stream stream = executingAssembly.GetManifestResourceStream(executingAssembly.GetName().Name + ".Mapping.Template.xml"); + var document = new XmlDocument(); + document.Load(stream); + return document; + } + + public void ApplyMappings(IMappingVisitor visitor) + { + XmlDocument mapping = null; + + try + { + visitor.CurrentType = typeof (T); + mapping = CreateMapping(visitor); + visitor.AddMappingDocument(mapping, typeof (T)); + } + catch (Exception e) + { + if (mapping != null) + { + var writer = new StringWriter(); + var xmlWriter = new XmlTextWriter(writer); + xmlWriter.Formatting = Formatting.Indented; + + mapping.WriteContentTo(xmlWriter); + Debug.WriteLine(writer.ToString()); + } + + string message = string.Format("Error while trying to build the Mapping Document for '{0}'", + typeof (T).FullName); + throw new ApplicationException(message, e); + + + } + } + } +} \ No newline at end of file diff --git a/src/FluentNHibernate/Mapping/ClassMapBase.cs b/src/FluentNHibernate/Mapping/ClassMapBase.cs new file mode 100644 index 000000000..5e60356c5 --- /dev/null +++ b/src/FluentNHibernate/Mapping/ClassMapBase.cs @@ -0,0 +1,107 @@ +using System; +using System.Collections.Generic; +using System.Linq.Expressions; +using System.Reflection; +using System.Xml; +using ShadeTree.Core; + +namespace ShadeTree.DomainModel.Mapping +{ + public class ClassMapBase + { + private bool _parentIsRequired = true; + + protected readonly List _properties = new List(); + + + protected bool parentIsRequired + { + get { return _parentIsRequired; } + set { _parentIsRequired = value; } + } + + protected void addPart(IMappingPart part) + { + _properties.Add(part); + } + + public PropertyMap Map(Expression> expression) + { + return Map(expression, null); + } + + public PropertyMap Map(Expression> expression, string columnName) + { + PropertyInfo property = ReflectionHelper.GetProperty(expression); + var map = new PropertyMap(property, parentIsRequired, columnName ?? property.Name, typeof(T)); + + _properties.Add(map); + + return map; + } + + public ManyToOnePart References(Expression> expression) + { + PropertyInfo property = ReflectionHelper.GetProperty(expression); + ManyToOnePart part = new ManyToOnePart(property); + addPart(part); + + return part; + } + + public DiscriminatorPart DiscriminateSubClassesOnColumn(string columnName) + { + var part = new DiscriminatorPart(columnName, _properties); + addPart(part); + + return part; + } + + public void Component(Expression> expression, Action> action) + { + PropertyInfo property = ReflectionHelper.GetProperty(expression); + + ComponentPart part = new ComponentPart(property, parentIsRequired); + addPart(part); + + action(part); + } + + public OneToManyPart HasMany(Expression> expression) + { + PropertyInfo property = ReflectionHelper.GetProperty(expression); + OneToManyPart part = new OneToManyPart(property); + + addPart(part); + + return part; + } + + public ManyToManyPart HasManyToMany(Expression> expression) + { + PropertyInfo property = ReflectionHelper.GetProperty(expression); + ManyToManyPart part = new ManyToManyPart(property); + + addPart(part); + + return part; + } + + protected void writeTheParts(XmlElement classElement, IMappingVisitor visitor) + { + _properties.Sort(new MappingPartComparer()); + foreach (IMappingPart part in _properties) + { + part.Write(classElement, visitor); + } + } + + internal class MappingPartComparer : IComparer + { + public int Compare(IMappingPart x, IMappingPart y) + { + return x.Level.CompareTo(y.Level); + } + } + } +} \ No newline at end of file diff --git a/src/FluentNHibernate/Mapping/ClassToTableMapping.cs b/src/FluentNHibernate/Mapping/ClassToTableMapping.cs new file mode 100644 index 000000000..53213eceb --- /dev/null +++ b/src/FluentNHibernate/Mapping/ClassToTableMapping.cs @@ -0,0 +1,41 @@ +using System; +using System.Collections.Generic; + +namespace ShadeTree.DomainModel.Mapping +{ + public static class ClassToTableMapping + { + private static readonly Dictionary _tables = new Dictionary(); + + public static void TableFor(string tableName) + { + if (_tables.ContainsKey(typeof (T))) + { + _tables[typeof (T)] = tableName; + } + else + { + _tables.Add(typeof (T), tableName); + } + } + + public static string GetTableNameFor() + { + if (_tables.ContainsKey(typeof (T))) + { + return _tables[typeof (T)]; + } + + return typeof (T).Name; + } + + public static void CopyTable() + { + string tableName = GetTableNameFor(); + if (!_tables.ContainsKey(typeof (T2))) + { + _tables.Add(typeof (T2), tableName); + } + } + } +} \ No newline at end of file diff --git a/src/FluentNHibernate/Mapping/ComponentPart.cs b/src/FluentNHibernate/Mapping/ComponentPart.cs new file mode 100644 index 000000000..47855a106 --- /dev/null +++ b/src/FluentNHibernate/Mapping/ComponentPart.cs @@ -0,0 +1,36 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using System.Text; +using System.Xml; +using ShadeTree.Validation; + +namespace ShadeTree.DomainModel.Mapping +{ + public class ComponentPart : ClassMapBase, IMappingPart + { + private readonly PropertyInfo _property; + + public ComponentPart(PropertyInfo property, bool parentIsRequired) + { + _property = property; + this.parentIsRequired = parentIsRequired && RequiredAttribute.IsRequired(_property) && parentIsRequired; + } + + public void Write(XmlElement classElement, IMappingVisitor visitor) + { + XmlElement element = classElement.AddElement("component") + .WithAtt("name", _property.Name) + .WithAtt("insert", "true") + .WithAtt("update", "true"); + + writeTheParts(element, visitor); + } + + public int Level + { + get { return 3; } + } + } +} diff --git a/src/FluentNHibernate/Mapping/DefaultConvention.cs b/src/FluentNHibernate/Mapping/DefaultConvention.cs new file mode 100644 index 000000000..170f0879c --- /dev/null +++ b/src/FluentNHibernate/Mapping/DefaultConvention.cs @@ -0,0 +1,17 @@ +using System; + +namespace ShadeTree.DomainModel.Mapping +{ + public class DefaultConvention : ITypeConvention + { + public bool CanHandle(Type type) + { + return true; + } + + public void AlterMap(IProperty property) + { + property.SetAttributeOnPropertyElement("type", TypeMapping.GetTypeString(property.PropertyType)); + } + } +} \ No newline at end of file diff --git a/src/FluentNHibernate/Mapping/DiscriminatorPart.cs b/src/FluentNHibernate/Mapping/DiscriminatorPart.cs new file mode 100644 index 000000000..56d5b45aa --- /dev/null +++ b/src/FluentNHibernate/Mapping/DiscriminatorPart.cs @@ -0,0 +1,72 @@ +using System; +using System.Collections.Generic; +using System.Xml; + +namespace ShadeTree.DomainModel.Mapping +{ + public class DiscriminatorPart : IMappingPart + { + private readonly string _columnName; + private readonly List _properties; + + + public DiscriminatorPart(string columnName, List _properties) + { + _columnName = columnName; + this._properties = _properties; + } + + #region IMappingPart Members + + public void Write(XmlElement classElement, IMappingVisitor visitor) + { + string typeString = TypeMapping.GetTypeString(typeof (T)); + classElement.AddElement("discriminator") + .WithAtt("column", _columnName) + .WithAtt("type", typeString); + } + + public int Level + { + get { return 1; } + } + + #endregion + + public SubClassExpression SubClass() + { + return new SubClassExpression(this); + } + + #region Nested type: SubClassExpression + + public class SubClassExpression + { + private readonly DiscriminatorPart _parent; + private string _discriminatorValue; + + public SubClassExpression(DiscriminatorPart parent) + { + _parent = parent; + } + + public SubClassExpression IsIdentifiedBy(DISC discriminator) + { + _discriminatorValue = discriminator.ToString(); + return this; + } + + public DiscriminatorPart MapSubClassColumns(Action> action) + { + var subclass = new SubClassPart(_discriminatorValue); + action(subclass); + + _parent._properties.Add(subclass); + + return _parent; + } + } + + #endregion + } +} \ No newline at end of file diff --git a/src/FluentNHibernate/Mapping/EnumerationTypeConvention.cs b/src/FluentNHibernate/Mapping/EnumerationTypeConvention.cs new file mode 100644 index 000000000..a63a8d7bb --- /dev/null +++ b/src/FluentNHibernate/Mapping/EnumerationTypeConvention.cs @@ -0,0 +1,21 @@ +using System; + +namespace ShadeTree.DomainModel.Mapping +{ + public class EnumerationTypeConvention : ITypeConvention + { + public bool CanHandle(Type type) + { + return type.IsEnum; + } + + public void AlterMap(IProperty property) + { + Type mapperType = typeof(GenericEnumMapper<>).MakeGenericType(property.PropertyType); + property.SetAttributeOnPropertyElement("type", mapperType.AssemblyQualifiedName); + + property.SetAttributeOnColumnElement("sql-type", "string"); + property.SetAttributeOnColumnElement("length", "50"); + } + } +} \ No newline at end of file diff --git a/src/FluentNHibernate/Mapping/GenericEnumMapper.cs b/src/FluentNHibernate/Mapping/GenericEnumMapper.cs new file mode 100644 index 000000000..b4d4a55ab --- /dev/null +++ b/src/FluentNHibernate/Mapping/GenericEnumMapper.cs @@ -0,0 +1,13 @@ +using System; +using NHibernate.Type; + +namespace ShadeTree.DomainModel.Mapping +{ + public class GenericEnumMapper : EnumStringType + { + public GenericEnumMapper() + : base(typeof (TEnum)) + { + } + } +} \ No newline at end of file diff --git a/src/FluentNHibernate/Mapping/IMapping.cs b/src/FluentNHibernate/Mapping/IMapping.cs new file mode 100644 index 000000000..9499363d9 --- /dev/null +++ b/src/FluentNHibernate/Mapping/IMapping.cs @@ -0,0 +1,15 @@ +using System.Xml; + +namespace ShadeTree.DomainModel.Mapping +{ + public interface IMapping + { + void ApplyMappings(IMappingVisitor visitor); + } + + public interface IMappingPart + { + void Write(XmlElement classElement, IMappingVisitor visitor); + int Level { get; } + } +} \ No newline at end of file diff --git a/src/FluentNHibernate/Mapping/IProperty.cs b/src/FluentNHibernate/Mapping/IProperty.cs new file mode 100644 index 000000000..e6e1630d2 --- /dev/null +++ b/src/FluentNHibernate/Mapping/IProperty.cs @@ -0,0 +1,19 @@ +using System; +using System.Reflection; +using System.Xml; +using NHibernate.UserTypes; + +namespace ShadeTree.DomainModel.Mapping +{ + public interface IProperty + { + void AddAlteration(Action action); + void SetAttributeOnPropertyElement(string name, string key); + void SetAttributeOnColumnElement(string name, string value); + Type PropertyType { get; } + string ColumnName(); + Type ParentType { get; } + PropertyInfo Property { get; } + bool ParentIsRequired { get; } + } +} \ No newline at end of file diff --git a/src/FluentNHibernate/Mapping/ITypeConvention.cs b/src/FluentNHibernate/Mapping/ITypeConvention.cs new file mode 100644 index 000000000..f3638e37f --- /dev/null +++ b/src/FluentNHibernate/Mapping/ITypeConvention.cs @@ -0,0 +1,11 @@ +using System; + +namespace ShadeTree.DomainModel.Mapping +{ + public interface ITypeConvention + { + bool CanHandle(Type type); + void AlterMap(IProperty property); + + } +} \ No newline at end of file diff --git a/src/FluentNHibernate/Mapping/IdentityPart.cs b/src/FluentNHibernate/Mapping/IdentityPart.cs new file mode 100644 index 000000000..8f1f3ca9d --- /dev/null +++ b/src/FluentNHibernate/Mapping/IdentityPart.cs @@ -0,0 +1,35 @@ +using System.Reflection; +using System.Xml; + +namespace ShadeTree.DomainModel.Mapping +{ + public class IdentityPart : IMappingPart + { + private readonly PropertyInfo _property; + private readonly string _columnName; + + public IdentityPart(PropertyInfo property, string columnName) + { + _property = property; + _columnName = columnName; + } + + + public void Write(XmlElement classElement, IMappingVisitor visitor) + { + XmlElement element = classElement.AddElement("id") + .WithAtt("xmlns", "urn:nhibernate-mapping-2.2") + .WithAtt("name", _property.Name) + .WithAtt("column", _columnName) + .WithAtt("type", TypeMapping.GetTypeString(_property.PropertyType)) + .WithAtt("unsaved-value", "0"); + + element.AddElement("generator").WithAtt("class", "identity"); + } + + public int Level + { + get { return 0; } + } + } +} \ No newline at end of file diff --git a/src/FluentNHibernate/Mapping/IgnoreNullableTypeConvention.cs b/src/FluentNHibernate/Mapping/IgnoreNullableTypeConvention.cs new file mode 100644 index 000000000..dfedaf0c9 --- /dev/null +++ b/src/FluentNHibernate/Mapping/IgnoreNullableTypeConvention.cs @@ -0,0 +1,17 @@ +using System; + +namespace ShadeTree.DomainModel.Mapping +{ + public class IgnoreNullableTypeConvention : ITypeConvention + { + public bool CanHandle(Type type) + { + return type.IsGenericType && type.GetGenericTypeDefinition().Equals(typeof(Nullable<>)); + } + + public void AlterMap(IProperty property) + { + // no-op; + } + } +} \ No newline at end of file diff --git a/src/FluentNHibernate/Mapping/ManyToManyPart.cs b/src/FluentNHibernate/Mapping/ManyToManyPart.cs new file mode 100644 index 000000000..5bf23f0a5 --- /dev/null +++ b/src/FluentNHibernate/Mapping/ManyToManyPart.cs @@ -0,0 +1,53 @@ +using System.Collections.Generic; +using System.Reflection; +using System.Xml; + +namespace ShadeTree.DomainModel.Mapping +{ + public class ManyToManyPart : IMappingPart + { + private readonly PropertyInfo _property; + private readonly Dictionary _properties = new Dictionary(); + + + public ManyToManyPart(PropertyInfo property) + { + _property = property; + _properties.Add("name", _property.Name); + _properties.Add("cascade", "none"); + } + + public ManyToManyPart CascadeAll() + { + _properties["cascade"] = "all"; + return this; + } + + public void Write(XmlElement classElement, IMappingVisitor visitor) + { + var conventions = visitor.Conventions; + + string tableName = conventions.GetManyToManyTableName(typeof(CHILD), typeof(PARENT)); + _properties.Add("table", tableName); + + XmlElement element = classElement.AddElement("bag").WithProperties(_properties); + + string foreignKeyName = conventions.GetForeignKeyNameOfParent(typeof(PARENT)); + element.AddElement("key").AddElement("column").WithAtt("name", foreignKeyName).WithAtt("not-null", "true"); + + string childForeignKeyName = conventions.GetForeignKeyNameOfParent(typeof(CHILD)); + + XmlElement manyToManyElement = element.AddElement("many-to-many") + .WithAtt("class", typeof(CHILD).AssemblyQualifiedName); + + manyToManyElement.AddElement("column") + .WithAtt("name", childForeignKeyName) + .WithAtt("not-null", "true"); + } + + public int Level + { + get { return 3; } + } + } +} \ No newline at end of file diff --git a/src/FluentNHibernate/Mapping/ManyToOnePart.cs b/src/FluentNHibernate/Mapping/ManyToOnePart.cs new file mode 100644 index 000000000..3c55ff6d1 --- /dev/null +++ b/src/FluentNHibernate/Mapping/ManyToOnePart.cs @@ -0,0 +1,43 @@ +using System; +using System.Collections.Generic; +using System.Reflection; +using System.Xml; +using ShadeTree.Validation; + +namespace ShadeTree.DomainModel.Mapping +{ + public class ManyToOnePart : IMappingPart + { + private readonly Dictionary _properties = new Dictionary(); + private readonly PropertyInfo _property; + + public ManyToOnePart(PropertyInfo property) + { + _property = property; + + _properties.Add("name", property.Name); + _properties.Add("foreign-key", string.Format("FK_{0}To{1}", property.DeclaringType.Name, property.Name)); + } + + #region IMappingPart Members + + public void Write(XmlElement classElement, IMappingVisitor visitor) + { + visitor.RegisterDependency(_property.PropertyType); + + string fkName = visitor.Conventions.GetForeignKeyName(_property); + _properties.Add("column", fkName); + _properties.Add("cascade", "all"); + + classElement.AddElement("many-to-one").WithProperties(_properties); + + } + + public int Level + { + get { return 3; } + } + + #endregion + } +} \ No newline at end of file diff --git a/src/FluentNHibernate/Mapping/OneToManyPart.cs b/src/FluentNHibernate/Mapping/OneToManyPart.cs new file mode 100644 index 000000000..022d37ffa --- /dev/null +++ b/src/FluentNHibernate/Mapping/OneToManyPart.cs @@ -0,0 +1,60 @@ +using System.Collections.Generic; +using System.Reflection; +using System.Xml; + +namespace ShadeTree.DomainModel.Mapping +{ + public class OneToManyPart : IMappingPart + { + private readonly Dictionary _properties = new Dictionary(); + private readonly PropertyInfo _property; + + + public OneToManyPart(PropertyInfo property) + { + _property = property; + _properties.Add("name", _property.Name); + _properties.Add("cascade", "none"); + } + + #region IMappingPart Members + + public void Write(XmlElement classElement, IMappingVisitor visitor) + { + // TODO -- hard-coded to List just for today + XmlElement element = classElement.AddElement("bag").WithProperties(_properties); + + string foreignKeyName = visitor.Conventions.GetForeignKeyNameOfParent(typeof(PARENT)); + element.AddElement("key").SetAttribute("column", foreignKeyName); + element.AddElement("one-to-many").SetAttribute("class", typeof (CHILD).AssemblyQualifiedName); + + + } + + public int Level + { + get { return 3; } + } + + #endregion + + public OneToManyPart LazyLoad() + { + _properties["lazy"] = "true"; + return this; + } + + public OneToManyPart IsInverse() + { + _properties.Add("inverse", "true"); + return this; + } + + public OneToManyPart CascadeAll() + { + _properties["cascade"] = "all"; + + return this; + } + } +} \ No newline at end of file diff --git a/src/FluentNHibernate/Mapping/PropertyMap.cs b/src/FluentNHibernate/Mapping/PropertyMap.cs new file mode 100644 index 000000000..6545777e3 --- /dev/null +++ b/src/FluentNHibernate/Mapping/PropertyMap.cs @@ -0,0 +1,115 @@ +using System; +using System.Collections.Generic; +using System.Reflection; +using System.Xml; +using ShadeTree.Core; +using ShadeTree.Validation; + +namespace ShadeTree.DomainModel.Mapping +{ + public class PropertyMap : IMappingPart, IProperty + { + private readonly List> _alterations = new List>(); + private readonly Cache _extendedProperties = new Cache(); + private readonly Cache _columnProperties = new Cache(); + private readonly Type _parentType; + private readonly PropertyInfo _property; + private readonly bool _parentIsRequired; + private string _columnName; + + + public PropertyMap(PropertyInfo property, bool parentIsRequired, string columnName, Type parentType) + { + _property = property; + _parentIsRequired = parentIsRequired; + _columnName = columnName; + _parentType = parentType; + + _columnProperties.Store("name", _columnName); + } + + public bool ParentIsRequired + { + get { return _parentIsRequired; } + } + + public PropertyInfo Property + { + get { return _property; } + } + + #region IMappingPart Members + + public void Write(XmlElement classElement, IMappingVisitor visitor) + { + visitor.Conventions.AlterMap(this); + + XmlElement element = classElement.AddElement("property") + .WithAtt("name", _property.Name) + .WithAtt("column", _columnName) + .WithProperties(_extendedProperties); + + + element.AddElement("column").WithProperties(_columnProperties); + + foreach (var action in _alterations) + { + action(element); + } + } + + public int Level + { + get { return 2; } + } + + #endregion + + #region IProperty Members + + public string ColumnName() + { + return _property.Name; + } + + public void AddAlteration(Action action) + { + _alterations.Add(action); + } + + public void SetAttributeOnPropertyElement(string name, string key) + { + _extendedProperties.Store(name, key); + } + + public void SetAttributeOnColumnElement(string name, string value) + { + _columnProperties.Store(name, value); + } + + public Type PropertyType + { + get { return _property.PropertyType; } + } + + public Type ParentType + { + get { return _parentType; } + } + + #endregion + + public PropertyMap TheColumnNameIs(string name) + { + _columnName = name; + return this; + } + + public PropertyMap ValueIsAutoNumber() + { + _extendedProperties.Store("insert", "true"); + + return this; + } + } +} \ No newline at end of file diff --git a/src/FluentNHibernate/Mapping/SubClassPart.cs b/src/FluentNHibernate/Mapping/SubClassPart.cs new file mode 100644 index 000000000..f26feed51 --- /dev/null +++ b/src/FluentNHibernate/Mapping/SubClassPart.cs @@ -0,0 +1,34 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Xml; + +namespace ShadeTree.DomainModel.Mapping +{ + public class SubClassPart : ClassMapBase, IMappingPart + { + private readonly string _discriminatorValue; + + public SubClassPart(string discriminatorValue) + { + _discriminatorValue = discriminatorValue; + } + + + public void Write(XmlElement classElement, IMappingVisitor visitor) + { + XmlElement subclassElement = classElement.AddElement("subclass") + .WithAtt("discriminator-value", _discriminatorValue) + .WithAtt("name", typeof(T).Name); + + writeTheParts(subclassElement, visitor); + + } + + public int Level + { + get { return 3; } + } + } +} diff --git a/src/FluentNHibernate/Mapping/Template.xml b/src/FluentNHibernate/Mapping/Template.xml new file mode 100644 index 000000000..aa6257dae --- /dev/null +++ b/src/FluentNHibernate/Mapping/Template.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/src/FluentNHibernate/Mapping/TypeMapping.cs b/src/FluentNHibernate/Mapping/TypeMapping.cs new file mode 100644 index 000000000..19e9ed174 --- /dev/null +++ b/src/FluentNHibernate/Mapping/TypeMapping.cs @@ -0,0 +1,12 @@ +using System; + +namespace ShadeTree.DomainModel.Mapping +{ + public static class TypeMapping + { + public static string GetTypeString(Type type) + { + return type.Name; + } + } +} \ No newline at end of file diff --git a/src/FluentNHibernate/Mapping/XmlExtensions.cs b/src/FluentNHibernate/Mapping/XmlExtensions.cs new file mode 100644 index 000000000..8b2e5f863 --- /dev/null +++ b/src/FluentNHibernate/Mapping/XmlExtensions.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Xml; +using ShadeTree.Core; + +namespace ShadeTree.DomainModel.Mapping +{ + public static class XmlExtensions + { + public static XmlElement AddElement(this XmlNode element, string name) + { + XmlElement child = element.OwnerDocument.CreateElement(name); + element.AppendChild(child); + + return child; + } + + + + public static XmlElement WithAtt(this XmlElement element, string key, string attValue) + { + element.SetAttribute(key, attValue); + return element; + } + + public static void SetAttributeOnChild(this XmlElement element, string childName, string attName, string attValue) + { + XmlElement childElement = element[childName]; + if (childElement == null) + { + childElement = element.AddElement(childName); + } + + childElement.SetAttribute(attName, attValue); + } + + public static XmlElement WithProperties(this XmlElement element, Dictionary properties) + { + foreach (var pair in properties) + { + element.SetAttribute(pair.Key, pair.Value); + } + + return element; + } + + public static XmlElement WithProperties(this XmlElement element, Cache properties) + { + properties.ForEachPair((k, v) => element.SetAttribute(k, v)); + + return element; + } + + public static XmlElement SetColumnProperty(this XmlElement element, string name, string value) + { + XmlElement columnElement = element["column"] ?? element.AddElement("column"); + columnElement.WithAtt(name, value); + + return element; + } + } +} diff --git a/src/FluentNHibernate/MappingVisitor.cs b/src/FluentNHibernate/MappingVisitor.cs new file mode 100644 index 000000000..76dc42c9d --- /dev/null +++ b/src/FluentNHibernate/MappingVisitor.cs @@ -0,0 +1,48 @@ +using System; +using System.Xml; +using NHibernate.Cfg; +using ShadeTree.DomainModel.Metadata; + +namespace ShadeTree.DomainModel +{ + public class MappingVisitor : IMappingVisitor + { + private readonly Configuration _configuration; + private readonly DependencyChain _chain; + private readonly Conventions _conventions; + + + public MappingVisitor(Conventions conventions, Configuration configuration, DependencyChain chain) + { + _conventions = conventions; + _configuration = configuration; + _chain = chain; + } + + public MappingVisitor() : this(new Conventions(), new Configuration(), new DependencyChain()) + { + } + + #region IMappingVisitor Members + + public Conventions Conventions + { + get { return _conventions; } + } + + public Type CurrentType { get; set;} + + + public virtual void AddMappingDocument(XmlDocument document, Type type) + { + _configuration.AddDocument(document); + } + + public void RegisterDependency(Type parentType) + { + _chain.RegisterDependency(CurrentType, parentType); + } + + #endregion + } +} \ No newline at end of file diff --git a/src/FluentNHibernate/Metadata/DependencyChain.cs b/src/FluentNHibernate/Metadata/DependencyChain.cs new file mode 100644 index 000000000..6b4dff6cd --- /dev/null +++ b/src/FluentNHibernate/Metadata/DependencyChain.cs @@ -0,0 +1,139 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using NHibernate; +using ShadeTree.Core; + +namespace ShadeTree.DomainModel.Metadata +{ + public interface IDeleter + { + void DeleteAll(Type type); + void FollowDependencies(TypeDependency dependency); + } + + public class Deleter : IDeleter + { + private readonly ISession _session; + private readonly List _types = new List(); + private readonly List _latches = new List(); + + public Deleter(ISessionSource source) + { + _session = source.CreateSession(); + } + + #region IDeleter Members + + public void DeleteAll(Type type) + { + try + { + if (_types.Contains(type)) return; + _session.Delete("from " + type.Name); + _session.Flush(); + _types.Add(type); + } + catch (Exception e) + { + string message = string.Format("Error deleting {0}", type.FullName); + Debug.WriteLine(message); + Debug.WriteLine(e.ToString()); + throw; + } + } + + public void FollowDependencies(TypeDependency dependency) + { + if (!_latches.Contains(dependency.Type)) + { + _latches.Add(dependency.Type); + dependency.ForEach(d => d.DeleteAll(this)); + } + } + + #endregion + } + + + public class DependencyChain + { + private readonly Cache _dependencies; + + public DependencyChain() + { + _dependencies = new Cache(type => new TypeDependency(type)); + } + + public void RegisterDependency(Type childType, Type parentType) + { + if (childType == parentType) return; + + TypeDependency child = _dependencies.Get(childType); + TypeDependency parent = _dependencies.Get(parentType); + + parent.AddDependency(child); + } + + public void DeleteAllOfType(IDeleter deleter, Type type) + { + _dependencies.Get(type).DeleteAll(deleter); + } + } + + public class TypeDependency + { + private readonly List _dependencies = new List(); + private readonly Type _type; + + public TypeDependency(Type type) + { + _type = type; + } + + public Type Type + { + get { return _type; } + } + + public void AddDependency(TypeDependency dependency) + { + if (_dependencies.Contains(dependency)) return; + _dependencies.Add(dependency); + } + + public void DeleteAll(IDeleter deleter) + { + deleter.FollowDependencies(this); + + Debug.WriteLine("delete: " + _type.FullName); + + deleter.DeleteAll(_type); + } + + public void ForEach(Action action) + { + _dependencies.ForEach(action); + } + + public bool Equals(TypeDependency obj) + { + if (ReferenceEquals(null, obj)) return false; + if (ReferenceEquals(this, obj)) return true; + return Equals(obj._type, _type); + } + + public override bool Equals(object obj) + { + if (ReferenceEquals(null, obj)) return false; + if (ReferenceEquals(this, obj)) return true; + if (obj.GetType() != typeof (TypeDependency)) return false; + return Equals((TypeDependency) obj); + } + + public override int GetHashCode() + { + return (_type != null ? _type.GetHashCode() : 0); + } + } +} \ No newline at end of file diff --git a/src/FluentNHibernate/PersistenceModel.cs b/src/FluentNHibernate/PersistenceModel.cs new file mode 100644 index 000000000..99407dd33 --- /dev/null +++ b/src/FluentNHibernate/PersistenceModel.cs @@ -0,0 +1,132 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Reflection; +using System.Threading; +using System.Xml; +using NHibernate.Cfg; +using ShadeTree.DomainModel.Mapping; +using ShadeTree.DomainModel.Metadata; +using StructureMap.Graph; + +namespace ShadeTree.DomainModel +{ + public class PersistenceModel : TypeRules + { + private List _mappings = new List(); + private Conventions _conventions = new Conventions(); + private DependencyChain _chain = new DependencyChain(); + private bool _configured = false; + + public PersistenceModel() + { + + } + + public void ForEach(Action action) where T : class + { + foreach (var mapping in _mappings) + { + T t = mapping as T; + if (t != null) action(t); + } + } + + protected void addTypeConvention(ITypeConvention convention) + { + _conventions.AddTypeConvention(convention); + } + + protected void addMappingsFromThisAssembly() + { + Assembly assembly = findTheCallingAssembly(); + addMappingsFromAssembly(assembly); + } + + protected void addMappingsFromAssembly(Assembly assembly) + { + foreach (Type type in assembly.GetExportedTypes()) + { + if (!type.IsGenericType && CanBeCast(typeof(IMapping), type)) + { + IMapping mapping = (IMapping) Activator.CreateInstance(type); + addMapping(mapping); + } + } + } + + protected void addMapping(IMapping mapping) + { + _mappings.Add(mapping); + } + + public Conventions Conventions + { + get { return _conventions; } + } + + private static Assembly findTheCallingAssembly() + { + StackTrace trace = new StackTrace(Thread.CurrentThread, false); + + Assembly thisAssembly = Assembly.GetExecutingAssembly(); + Assembly callingAssembly = null; + for (int i = 0; i < trace.FrameCount; i++) + { + StackFrame frame = trace.GetFrame(i); + Assembly assembly = frame.GetMethod().DeclaringType.Assembly; + if (assembly != thisAssembly) + { + callingAssembly = assembly; + break; + } + } + return callingAssembly; + } + + public DependencyChain Chain + { + get + { + if (!_configured) + { + Configure(new Configuration()); + } + + return _chain; + } + } + + + public void Configure(Configuration configuration) + { + _configured = true; + + MappingVisitor visitor = new MappingVisitor(_conventions, configuration, _chain); + _mappings.ForEach(mapping => mapping.ApplyMappings(visitor)); + } + + public void WriteMappingsTo(string folder) + { + DiagnosticMappingVisitor visitor = new DiagnosticMappingVisitor(folder, _conventions); + _mappings.ForEach(m => m.ApplyMappings(visitor)); + } + } + + public class DiagnosticMappingVisitor : MappingVisitor + { + private string _folder; + + public DiagnosticMappingVisitor(string folder, Conventions conventions) + { + _folder = folder; + } + + public override void AddMappingDocument(XmlDocument document, Type type) + { + string filename = Path.Combine(_folder, type.FullName + ".xml"); + document.Save(filename); + } + } +} \ No newline at end of file diff --git a/src/FluentNHibernate/PersistenceSpecification.cs b/src/FluentNHibernate/PersistenceSpecification.cs new file mode 100644 index 000000000..1a1b509ab --- /dev/null +++ b/src/FluentNHibernate/PersistenceSpecification.cs @@ -0,0 +1,178 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Linq.Expressions; +using System.Reflection; +using System.Text; +using ShadeTree.Core; +using StructureMap; + +namespace ShadeTree.DomainModel +{ + public class PersistenceSpecification where T : Entity, new() + { + private readonly List _allProperties = new List(); + private readonly IRepository _repository; + + public PersistenceSpecification() + { + _repository = createRepository(); + } + + private IRepository createRepository() + { + ISessionSource source = ObjectFactory.GetInstance(); + return new Repository(source.CreateSession()); + } + + public PersistenceSpecification CheckProperty(Expression> expression, object propertyValue) + { + PropertyInfo property = ReflectionHelper.GetProperty(expression); + _allProperties.Add(new PropertyValue(property, propertyValue)); + + return this; + } + + public PersistenceSpecification CheckReference(Expression> expression, object propertyValue) + { + _repository.Save(propertyValue); + + PropertyInfo property = ReflectionHelper.GetProperty(expression); + _allProperties.Add(new PropertyValue(property, propertyValue)); + + return this; + } + + + public PersistenceSpecification CheckList(Expression> expression, + IList propertyValue) + { + foreach (LIST item in propertyValue) + { + _repository.Save(item); + } + + PropertyInfo property = ReflectionHelper.GetProperty(expression); + _allProperties.Add(new ListValue(property, propertyValue)); + + return this; + } + + public void VerifyTheMappings() + { + // Create the initial copy + var first = new T(); + + // Set the "suggested" properties, including references + // to other entities and possibly collections + _allProperties.ForEach(p => p.SetValue(first)); + + // Save the first copy + _repository.Save(first); + + // Get a completely different IRepository + var secondRepository = createRepository(); + + // "Find" the same entity from the second IRepository + var second = secondRepository.Find(first.Id); + + // Validate that each specified property and value + // made the round trip + // It's a bit naive right now because it fails on the first failure + _allProperties.ForEach(p => p.CheckValue(second)); + } + + #region Nested type: ListValue + + internal class ListValue : PropertyValue + { + private readonly IList _expected; + + public ListValue(PropertyInfo property, IList propertyValue) + : base(property, propertyValue) + { + _expected = propertyValue; + } + + internal override void CheckValue(object target) + { + var actual = (IList)_property.GetValue(target, null); + assertGenericListMatches(actual, _expected); + } + + private static void assertGenericListMatches(IList actual, IList expected) + { + ArrayList list = new ArrayList(actual.ToArray()); + + if (expected.Count != list.Count) + { + throw new ApplicationException("The counts between actual and expected do not match"); + } + + + for (int i = 0; i < expected.Count; i++) + { + object expectedValue = expected[i]; + var actualValue = actual[i]; + if (!expectedValue.Equals(actualValue)) + { + string message = + string.Format( + "Expected '{0}' but got '{1}' at position {2}", + expectedValue, + actualValue, i); + + throw new ApplicationException(message); + } + } + } + } + + #endregion + + #region Nested type: PropertyValue + + internal class PropertyValue + { + protected readonly PropertyInfo _property; + protected readonly object _propertyValue; + + internal PropertyValue(PropertyInfo property, object propertyValue) + { + _property = property; + _propertyValue = propertyValue; + } + + internal virtual void SetValue(object target) + { + try + { + _property.SetValue(target, _propertyValue, null); + } + catch (Exception e) + { + string message = "Error while trying to set property " + _property.Name; + throw new ApplicationException(message, e); + } + } + + internal virtual void CheckValue(object target) + { + object actual = _property.GetValue(target, null); + if (!_propertyValue.Equals(actual)) + { + string message = + string.Format( + "Expected '{0}' but got '{1}' for Property '{2}'", + _propertyValue, + actual, _property.Name); + + throw new ApplicationException(message); + } + } + } + + #endregion + } +} diff --git a/src/FluentNHibernate/Query/EntityQueryDefinition.cs b/src/FluentNHibernate/Query/EntityQueryDefinition.cs new file mode 100644 index 000000000..654bbd1ac --- /dev/null +++ b/src/FluentNHibernate/Query/EntityQueryDefinition.cs @@ -0,0 +1,192 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Linq.Expressions; +using System.Reflection; +using NHibernate.Util; +using ShadeTree.Core; + +namespace ShadeTree.DomainModel.Query +{ + + + public class EntityQueryDefinition + { + private readonly IDictionary _filterProperties; + private readonly IDictionary _quickFilterProperties; + + public EntityQueryDefinition() + { + _filterProperties = new Dictionary(); + _quickFilterProperties = new Dictionary(); + } + + public IEnumerable FilterableProperties + { + get { return _filterProperties.Values; } + } + + public IEnumerable QuickFilterProperties + { + get { return _quickFilterProperties.Values; } + } + + public FilterableProperty GetFilterPropertyForKey(string key) + { + return _filterProperties[key]; + } + + public void AddQuickFilterProperty(FilterableProperty prop) + { + _quickFilterProperties.Add(prop.PropertyName, prop); + AddFilterProperty(prop); + } + + public void AddFilterProperty(FilterableProperty prop) + { + _filterProperties.Add(prop.PropertyName, prop); + } + } + + public class FilterableProperty + { + public static FilterableProperty Build(Expression> expression) + { + return new FilterableProperty(){Expression = expression,Property = ReflectionHelper.GetProperty(expression)}; + } + + + public Expression Expression{ get; set; } + public PropertyInfo Property { get; set; } + + public IFilterType[] Filters + { + get + { + return FilterTypeRegistry.GetFiltersFor(PropertyType).ToArray(); + } + } + + public string PropertyName + { + get { return Property.Name; } + } + + public Type PropertyType + { + get { return Property.PropertyType; } + } + } + + public class EntityQueryDefinitionBuilder + { + private readonly EntityQueryDefinition _queryDef = new EntityQueryDefinition(); + + public EntityQueryDefinitionBuilder AllowFilterOn(Expression> expression) + { + AddFilterProperty(expression, false); + return this; + } + + public EntityQueryDefinitionBuilder AddQuickFilterFor(Expression> expression) + { + AddFilterProperty(expression, true); + return this; + } + + private void AddFilterProperty(Expression> expression, bool isQuickFilter) + { + Accessor accessor = ReflectionHelper.GetAccessor(expression); + + var filterProp = new FilterableProperty { Property = accessor.InnerProperty, Expression = expression }; + + if( isQuickFilter ) + { + _queryDef.AddQuickFilterProperty(filterProp); + } + else + { + _queryDef.AddFilterProperty(filterProp); + } + } + + public EntityQueryDefinition QueryDefinition { get { return _queryDef; } } + } + + public class Criteria + { + public string property{ get; set;} + public string op{ get; set;} + public string value{ get; set; } + } + + public interface IEntityQueryBuilder + { + IEnumerable PrepareQuery(Criteria[] criteria, IRepository repo); + } + + public class EntityQueryBuilder : IEntityQueryBuilder + { + private readonly IEnumerable _expressionParams = new[] { Expression.Parameter(typeof(ENTITY), "target") }; + private readonly EntityQueryDefinition _queryDef; + + public EntityQueryBuilder(EntityQueryDefinition queryDef) + { + _queryDef = queryDef; + + } + + public Expression> FilterExpression { get; set; } + + public IEnumerable PrepareQuery(Criteria[] criteria, IRepository repo) + { + FilterExpression = null; + + foreach( var criterion in criteria ) + { + FilterableProperty filterProp = _queryDef.GetFilterPropertyForKey(criterion.property); + + string filterTypeKey = criterion.op; + + IFilterType filterType = + FilterTypeRegistry.GetFiltersFor(filterProp.PropertyType).Single(p => p.Key == filterTypeKey); + + AddFilter(filterType, filterProp, criterion.value); + } + + return repo.Query(FilterExpression); + } + + public void AddFilter(IFilterType filterType, FilterableProperty filterProp, string valueAsString) + { + var getMemberValueExpr = Expression.Invoke(filterProp.Expression, _expressionParams.Cast()); + + var valueExpr = ChangeTypeIfNecessary(filterProp, valueAsString); + + var filterExpr = filterType.GetExpression(getMemberValueExpr, valueExpr); + + var curExpr = (FilterExpression == null) + ? filterExpr + : Expression.AndAlso(FilterExpression.Body, filterExpr); + + FilterExpression = Expression.Lambda>(curExpr, _expressionParams); + } + + private static Expression ChangeTypeIfNecessary(FilterableProperty filterProp, string valueAsString) + { + if (filterProp.PropertyType == typeof(string)) + { + return Expression.Constant(valueAsString); + } + + var changeTypeMethod = typeof (Convert).GetMethod("ChangeType", + new[] {typeof (object), typeof (Type)}); + + var valueExpr = Expression.Call(changeTypeMethod, Expression.Constant(valueAsString), + Expression.Constant(filterProp.PropertyType)); + + return Expression.Convert(valueExpr, filterProp.PropertyType); + } + } +} \ No newline at end of file diff --git a/src/FluentNHibernate/Query/FilterType.cs b/src/FluentNHibernate/Query/FilterType.cs new file mode 100644 index 000000000..4f80ef5bb --- /dev/null +++ b/src/FluentNHibernate/Query/FilterType.cs @@ -0,0 +1,178 @@ +using System; +using System.Collections.Generic; +using System.Linq.Expressions; +using System.Reflection; +using ShadeTree.Core; + +namespace ShadeTree.DomainModel.Query +{ + public interface IFilterType + { + string Key { get; } + Expression GetExpression(Expression memberAccessExpression, Expression valueExpression); + } + + public class FilterTypeRegisterExpression + { + private readonly IFilterType _filter; + + public FilterTypeRegisterExpression(IFilterType filter) + { + _filter = filter; + } + + public FilterTypeRegisterExpression ForType() + { + FilterTypeRegistry.RegisterFilterForType(_filter, typeof (T)); + return this; + } + + public FilterTypeRegisterExpression ForTypes(params Type[] filterableTypes) + { + foreach (Type filterableType in filterableTypes) + { + FilterTypeRegistry.RegisterFilterForType(_filter, filterableType); + } + + return this; + } + } + + public static class FilterTypeRegistry + { + private static readonly Cache> _filterCache = + new Cache>(key => new List()); + + static FilterTypeRegistry() + { + ResetAll(); + } + + public static FilterTypeRegisterExpression RegisterFilter(IFilterType filter) + { + return new FilterTypeRegisterExpression(filter); + } + + public static void RegisterFilterForType(IFilterType filterType, Type filterableType) + { + _filterCache.Get(filterableType).Add(filterType); + } + + public static IEnumerable GetFiltersFor() + { + return GetFiltersFor(typeof (T)); + } + + public static IEnumerable GetFiltersFor(Type filterableType) + { + return _filterCache.Get(filterableType); + } + + public static void ClearAll() + { + _filterCache.ClearAll(); + } + + public static void ResetAll() + { + ClearAll(); + + var standardTypes = new[] + { + typeof (char), + typeof (byte), + typeof (bool), + typeof (short), + typeof (int), + typeof (long), + typeof (DateTime), + typeof (sbyte), + typeof (ushort), + typeof (uint), + typeof (ulong), + typeof (char?), + typeof (byte?), + typeof (bool), + typeof (short?), + typeof (int?), + typeof (long?), + typeof (DateTime?), + typeof (sbyte?), + typeof (ushort?), + typeof (uint?), + typeof (ulong?) + }; + + RegisterFilter(new BinaryFilterType {Key = "EQUAL", FilterExpressionType = ExpressionType.Equal}) + .ForTypes(standardTypes) + .ForType(); + + RegisterFilter(new BinaryFilterType {Key = "NOTEQUAL", FilterExpressionType = ExpressionType.Equal}) + .ForTypes(standardTypes) + .ForType(); + + RegisterFilter(new BinaryFilterType + {Key = "LESSTHAN", FilterExpressionType = ExpressionType.LessThan}) + .ForTypes(standardTypes); + + RegisterFilter(new BinaryFilterType + {Key = "LESSTHANOREQUAL", FilterExpressionType = ExpressionType.LessThanOrEqual}) + .ForTypes(standardTypes); + + RegisterFilter(new BinaryFilterType + {Key = "GREATERTHAN", FilterExpressionType = ExpressionType.GreaterThan}) + .ForTypes(standardTypes); + + RegisterFilter(new BinaryFilterType + {Key = "GREATERTHANOREQUAL", FilterExpressionType = ExpressionType.GreaterThanOrEqual}) + .ForTypes(standardTypes); + + RegisterFilter(new StringFilterType {Key = "STARTSWITH", StringMethod = s => s.StartsWith("")}) + .ForType(); + + RegisterFilter(new StringFilterType {Key = "ENDSWITH", StringMethod = s => s.EndsWith("")}) + .ForType(); + + RegisterFilter(new StringFilterType {Key = "CONTAINS", StringMethod = s => s.Contains("")}) + .ForType(); + } + } + + public class BinaryFilterType : IFilterType + { + public ExpressionType FilterExpressionType { get; set; } + + #region IFilterType Members + + public string Key { get; set; } + + public Expression GetExpression(Expression memberAccessExpression, Expression valueExpression) + { + return Expression.MakeBinary(FilterExpressionType, memberAccessExpression, valueExpression); + } + + #endregion + } + + public class StringFilterType : IFilterType + { + private MethodInfo _stringMethodInfo; + public Expression> StringMethod { get; set; } + + #region IFilterType Members + + public string Key { get; set; } + + public virtual Expression GetExpression(Expression memberAccessExpression, Expression valueExpression) + { + if (_stringMethodInfo == null) + { + _stringMethodInfo = ReflectionHelper.GetMethod(StringMethod); + } + + return Expression.Call(memberAccessExpression, _stringMethodInfo, valueExpression); + } + + #endregion + } +} \ No newline at end of file diff --git a/src/FluentNHibernate/SessionSource.cs b/src/FluentNHibernate/SessionSource.cs new file mode 100644 index 000000000..0bb84875b --- /dev/null +++ b/src/FluentNHibernate/SessionSource.cs @@ -0,0 +1,69 @@ +using System; +using System.Collections.Generic; +using System.Data; +using System.Linq; +using System.Text; +using NHibernate; +using NHibernate.Cfg; + +namespace ShadeTree.DomainModel +{ + public interface ISessionSource + { + ISession CreateSession(); + void BuildSchema(); + PersistenceModel Model { get; } + } + + public class SessionSource : ISessionSource + { + private ISessionFactory _sessionFactory; + private Configuration _configuration; + private PersistenceModel _model; + + public SessionSource(IDictionary properties, PersistenceModel model) + { + _configuration = new Configuration(); + _configuration.AddProperties(properties); + + model.Configure(_configuration); + _model = model; + + _sessionFactory = _configuration.BuildSessionFactory(); + } + + public PersistenceModel Model + { + get { return _model; } + } + + public ISession CreateSession() + { + return _sessionFactory.OpenSession(); + } + + public void BuildSchema() + { + ISession session = CreateSession(); + IDbConnection connection = session.Connection; + + string[] drops = _configuration.GenerateDropSchemaScript(_sessionFactory.Dialect); + executeScripts(drops, connection); + + string[] scripts = _configuration.GenerateSchemaCreationScript(_sessionFactory.Dialect); + executeScripts(scripts, connection); + } + + private static void executeScripts(string[] scripts, IDbConnection connection) + { + foreach (var script in scripts) + { + IDbCommand command = connection.CreateCommand(); + command.CommandText = script; + command.ExecuteNonQuery(); + } + } + + + } +} diff --git a/tools/NHibernate/Castle.Core.dll b/tools/NHibernate/Castle.Core.dll new file mode 100644 index 000000000..943c68ff2 Binary files /dev/null and b/tools/NHibernate/Castle.Core.dll differ diff --git a/tools/NHibernate/Castle.Core.xml b/tools/NHibernate/Castle.Core.xml new file mode 100644 index 000000000..50d649b21 --- /dev/null +++ b/tools/NHibernate/Castle.Core.xml @@ -0,0 +1,3049 @@ + + + + Castle.Core + + + + + This attribute is usefull only when you want to register all components + on an assembly as a batch process. + By doing so, the batch register will look + for this attribute to distinguish components from other classes. + + + + + Base for Attributes that want to express lifestyle + chosen by the component. + + + + + Initializes a new instance of the class. + + The type. + + + + Gets or sets the lifestyle. + + The lifestyle. + + + + Initializes a new instance of the class. + + The key. + + + + Initializes a new instance of the class. + + The key. + The service. + + + + Initializes a new instance of the class. + + The key. + The service. + The lifestyle. + + + + Gets the service. + + The service. + + + + Gets the key. + + The key. + + + + Associates a custom component with a component + + + + + Initializes a new instance of the class. + + Type of the component activator. + + + + Gets the type of the component activator. + + The type of the component activator. + + + + Specifies the proxying behavior for a component. + + + + + Initializes a new instance of the class. + + + + + Gets or sets a value indicating whether the generated + interface proxy should inherit from . + + + + + Determines if the component requires a single interface proxy. + + true if the component requires a single interface proxy. + + + + Gets or sets the additional interfaces used during proxy generation. + + + + + Marks as property to be skipped and not be wired + by the IoC container + + + + + Used to declare that a component wants interceptors acting on it. + + + + + Constructs the InterceptorAttribute pointing to + a key to a interceptor + + + + + + Constructs the InterceptorAttribute pointing to + a service + + + + + + Indicates that the target components wants a + singleton lifestyle. + + + + + Initializes a new instance of the class. + + + + + Indicates that the target components wants a + transient lifestyle. + + + + + Initializes a new instance of the class. + + + + + Indicates that the target components wants a + per thread lifestyle. + + + + + Initializes a new instance of the class. + + + + + Indicates that the target components wants a + per web request lifestyle. + + + + + Indicates that the target components wants a + pooled lifestyle. + + + + + Initializes a new instance of the class + using the default initial pool size (5) and the max pool size (15). + + + + + Initializes a new instance of the class. + + Initial size of the pool. + Max pool size. + + + + Gets the initial size of the pool. + + The initial size of the pool. + + + + Gets the maximum pool size. + + The size of the max pool. + + + + Indicates that the target components wants a + custom lifestyle. + + + + + Initializes a new instance of the class. + + The lifestyle handler. + + + + Gets the type of the lifestyle handler. + + The type of the lifestyle handler. + + + + New interface that is going to be used by DynamicProxy 2 + + + + + New interface that is going to be used by DynamicProxy 2 + + + + + Returns the concrete instantiation of , with any generic parameters bound to real types. + + The concrete instantiation of , or if not a generic method. + Can be slower than calling . + + + + Returns the concrete instantiation of , with any generic parameters bound to real types. + + The concrete instantiation of , or if not a generic method. + Can be slower than calling . + + + + + + + + + + The generic arguments of the method, or null if not a generic method. + + + + + + + + + + For interface proxies, this will point to the + on the target class + + + + + Interceptors might implement this to receive the + ComponentModel on behalf of the component where the + interceptor is acting. + + + + + Get the proxy target (note that null is a valid target!) + + + + + + Gets the interceptors for the proxy + + + + + + Abstract representation of a vertex. + + + + + The nodes that dependes on this node + + + + + The nodes that this node depends + + + + + The node has not been visited yet + + + + + This node is in the process of being visited + + + + + This now was visited + + + + + Represents a collection of objects + which are guaranted to be unique + and holds a color for them + + + + + Holds a timestamp (integer) + for a given item + + + + + Returns the node at the specified index. + + The lookup index. + The node at the specified index. + + If the specified is greater than the + number of objects within the list. + + + + + Validates the specified index. + + The lookup index. + + If the index is invalid. + + + + + Lifecycle interface. If implemented by a component, + the method Initialized will be invoked by the container + before making the component available to the external world. + + + + + Implementors should perform any initialization logic. + + + + + Only called for components that + belongs to a pool when the component + comes back to the pool. + + + + + Implementors should perform any + initialization/clean up. + + + + + Interface for components that wish to be started by the container + + + + + Starts this instance. + + + + + Stops this instance. + + + + + Provides a factory that can produce either or + classes. + + + + + Manages the instantiation of s. + + + + + Creates a new logger, getting the logger name from the specified type. + + + + + Creates a new logger. + + + + + Creates a new logger, getting the logger name from the specified type. + + + + + Creates a new logger. + + + + + Creates a new extended logger, getting the logger name from the specified type. + + + + + Creates a new extended logger. + + + + + Creates a new extended logger, getting the logger name from the specified type. + + + + + Creates a new extended logger. + + + + + Creates a new extended logger, getting the logger name from the specified type. + + + + + Creates a new extended logger. + + + + + Creates a new extended logger, getting the logger name from the specified type. + + + + + Creates a new extended logger. + + + + + Creates a new logger, getting the logger name from the specified type. + + + + + Creates a new logger. + + + + + Creates a new logger, getting the logger name from the specified type. + + + + + Creates a new logger. + + + + + Gets the configuration file. + + i.e. log4net.config + + + + + Gets the configuration file. + + i.e. log4net.config + + + + + Summary description for ConsoleFactory. + + + + + NullLogFactory used when logging is turned off. + + + + + Creates an instance of ILogger with the specified name. + + Name. + + + + + Creates an instance of ILogger with the specified name and LoggerLevel. + + Name. + Level. + + + + + Creates outputing + to files. The name of the file is derived from the log name + plus the 'log' extension. + + + + + The Logger sending everything to the standard output streams. + This is mainly for the cases when you have a utility that + does not have a logger to supply. + + + + + The Level Filtered Logger class. This is a base clase which + provides a LogLevel attribute and reroutes all functions into + one Log method. + + + + + Manages logging. + + + This is a facade for the different logging subsystems. + It offers a simplified interface that follows IOC patterns + and a simplified priority/level/severity abstraction. + + + + + Logs a debug message. + + The message to log + + + + Logs a debug message. + + The exception to log + The message to log + + + + Logs a debug message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs a debug message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs a debug message. + + The exception to log + Format string for the message to log + Format arguments for the message to log + + + + Logs a debug message. + + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a debug message. + + The exception to log + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs an info message. + + The message to log + + + + Logs an info message. + + The exception to log + The message to log + + + + Logs an info message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs an info message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs an info message. + + The exception to log + Format string for the message to log + Format arguments for the message to log + + + + Logs an info message. + + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs an info message. + + The exception to log + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a warn message. + + The message to log + + + + Logs a warn message. + + The exception to log + The message to log + + + + Logs a warn message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs a warn message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs a warn message. + + The exception to log + Format string for the message to log + Format arguments for the message to log + + + + Logs a warn message. + + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a warn message. + + The exception to log + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs an error message. + + The message to log + + + + Logs an error message. + + The exception to log + The message to log + + + + Logs an error message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs an error message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs an error message. + + The exception to log + Format string for the message to log + Format arguments for the message to log + + + + Logs an error message. + + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs an error message. + + The exception to log + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a fatal message. + + The message to log + + + + Logs a fatal message. + + The exception to log + The message to log + + + + Logs a fatal message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs a fatal message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs a fatal message. + + The exception to log + Format string for the message to log + Format arguments for the message to log + + + + Logs a fatal message. + + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a fatal message. + + The exception to log + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a fatal error message. + + The Message + + + + Logs a fatal error message. + + The Message + The Exception + + + + Logs a fatal error message. + + Message format + Array of objects to write using format + + + + Create a new child logger. + The name of the child logger is [current-loggers-name].[passed-in-name] + + The Subname of this logger. + The New ILogger instance. + If the name has an empty element name. + + + + Determines if messages of priority "debug" will be logged. + + True if "debug" messages will be logged. + + + + Determines if messages of priority "info" will be logged. + + True if "info" messages will be logged. + + + + Determines if messages of priority "warn" will be logged. + + True if "warn" messages will be logged. + + + + Determines if messages of priority "error" will be logged. + + True if "error" messages will be logged. + + + + Determines if messages of priority "fatal" will be logged. + + True if "fatal" messages will be logged. + + + + Determines if messages of priority "fatalError" will be logged. + + True if "fatalError" messages will be logged. + + + + Creates a new LevelFilteredLogger. + + + + + Keep the instance alive in a remoting scenario + + + + + + Logs a debug message. + + The message to log + + + + Logs a debug message. + + The exception to log + The message to log + + + + Logs a debug message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs a debug message. + + The exception to log + Format string for the message to log + Format arguments for the message to log + + + + Logs a debug message. + + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a debug message. + + The exception to log + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a debug message. + + Message format + Array of objects to write using format + + + + Logs an info message. + + The message to log + + + + Logs an info message. + + The exception to log + The message to log + + + + Logs an info message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs an info message. + + The exception to log + Format string for the message to log + Format arguments for the message to log + + + + Logs an info message. + + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs an info message. + + The exception to log + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs an info message. + + Message format + Array of objects to write using format + + + + Logs a warn message. + + The message to log + + + + Logs a warn message. + + The exception to log + The message to log + + + + Logs a warn message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs a warn message. + + The exception to log + Format string for the message to log + Format arguments for the message to log + + + + Logs a warn message. + + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a warn message. + + The exception to log + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a warn message. + + Message format + Array of objects to write using format + + + + Logs an error message. + + The message to log + + + + Logs an error message. + + The exception to log + The message to log + + + + Logs an error message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs an error message. + + The exception to log + Format string for the message to log + Format arguments for the message to log + + + + Logs an error message. + + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs an error message. + + The exception to log + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs an error message. + + Message format + Array of objects to write using format + + + + Logs a fatal message. + + The message to log + + + + Logs a fatal message. + + The exception to log + The message to log + + + + Logs a fatal message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs a fatal message. + + The exception to log + Format string for the message to log + Format arguments for the message to log + + + + Logs a fatal message. + + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a fatal message. + + The exception to log + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a fatal message. + + Message format + Array of objects to write using format + + + + Logs a fatal error message. + + The Message + + + + Logs a fatal error message. + + The Message + The Exception + + + + Logs a fatal error message. + + Message format + Array of objects to write using format + + + + Implementors output the log content by implementing this method only. + Note that exception can be null + + + + + + + + + The LoggerLevel that this logger + will be using. Defaults to LoggerLevel.Off + + + + + The name that this logger will be using. + Defaults to String.Empty + + + + + Determines if messages of priority "debug" will be logged. + + true if log level flags include the bit + + + + Determines if messages of priority "info" will be logged. + + true if log level flags include the bit + + + + Determines if messages of priority "warn" will be logged. + + true if log level flags include the bit + + + + Determines if messages of priority "error" will be logged. + + true if log level flags include the bit + + + + Determines if messages of priority "fatal" will be logged. + + true if log level flags include the bit + + + + Determines if messages of priority "fatal" will be logged. + + true if log level flags include the bit + + + + Creates a new ConsoleLogger with the Level + set to LoggerLevel.Debug and the Name + set to String.Empty. + + + + + Creates a new ConsoleLogger with the Name + set to String.Empty. + + The logs Level. + + + + Creates a new ConsoleLogger with the Level + set to LoggerLevel.Debug. + + The logs Name. + + + + Creates a new ConsoleLogger. + + The logs Name. + The logs Level. + + + + A Common method to log. + + The level of logging + The name of the logger + The Message + The Exception + + + + Returns a new ConsoleLogger with the name + added after this loggers name, with a dot in between. + + The added hierarchical name. + A new ConsoleLogger. + + + + The Logger using standart Diagnostics namespace. + + + + + Creates a logger based on . + + + + + + Creates a logger based on . + + + + + + + Creates a logger based on . + + + + + + + + The Null Logger class. This is useful for implementations where you need + to provide a logger to a utility class, but do not want any output from it. + It also helps when you have a utility that does not have a logger to supply. + + + + + Provides an interface that supports and + allows the storage and retrieval of Contexts. These are supported in + both log4net and NLog. + + + + + Exposes the Global Context of the extended logger. + + + + + Exposes the Thread Context of the extended logger. + + + + + Exposes the Thread Stack of the extended logger. + + + + + Creates a new NullLogger. + + + + + No-op. + + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + + + + Returns this NullLogger. + + Ignored + This ILogger instance. + + + + No-op. + + false + + + + No-op. + + false + + + + No-op. + + false + + + + No-op. + + false + + + + No-op. + + false + + + + No-op. + + false + + + + Returns empty context properties. + + + + + Returns empty context properties. + + + + + Returns empty context stacks. + + + + + Interface for Context Properties implementations + + + + This interface defines a basic property get set accessor. + + + Based on the ContextPropertiesBase of log4net, by Nicko Cadell. + + + + + + Gets or sets the value of a property + + + The value for the property with the specified key + + + + Gets or sets the value of a property + + + + + + The Stream Logger class. This class can stream log information + to any stream, it is suitable for storing a log file to disk, + or to a MemoryStream for testing your components. + + + This logger is not thread safe. + + + + + Creates a new StreamLogger with default encoding + and buffer size. Initial Level is set to Debug. + + + The name of the log. + + + The stream that will be used for logging, + seeking while the logger is alive + + + + + Creates a new StreamLogger with default buffer size. + Initial Level is set to Debug. + + + The name of the log. + + + The stream that will be used for logging, + seeking while the logger is alive + + + The encoding that will be used for this stream. + + + + + + Creates a new StreamLogger. + Initial Level is set to Debug. + + + The name of the log. + + + The stream that will be used for logging, + seeking while the logger is alive + + + The encoding that will be used for this stream. + + + + The buffer size that will be used for this stream. + + + + + + Creates a new StreamLogger with + Debug as default Level. + + The name of the log. + The StreamWriter the log will write to. + + + + The WebLogger sends everything to the HttpContext.Trace + + + Trace must be enabled on the Asp.Net configuration file (web.config or machine.config) + + + + + Creates a new WebLogger with the priority set to DEBUG. + + + + + Creates a new WebLogger. + + The Log level typecode. + + + + Creates a new WebLogger. + + The Log name. + + + + Creates a new WebLogger. + + The Log name. + The Log level typecode. + + + + A Common method to log. + + The level of logging + The Log name. + The Message + The Exception + + + + Just returns this logger (WebLogger is not hierarchical). + + Ignored + This ILogger instance. + + + + Supporting Logger levels. + + + + + Logging will be off + + + + + Fatal logging level + + + + + Error logging level + + + + + Warn logging level + + + + + Info logging level + + + + + Debug logging level + + + + + This is an abstract implementation + that deals with methods that can be abstracted away + from underlying implementations. + + + AbstractConfiguration makes easier to implementers + to create a new version of + + + + + Summary description for IConfiguration. + + + is a interface encapsulating a configuration node + used to retrieve configuration values. + + + + + Gets the value of the node and converts it + into specified . + + The + + The Default value returned if the convertion fails. + + The Value converted into the specified type. + + + + Gets the name of the node. + + + The Name of the node. + + + + + Gets the value of the node. + + + The Value of the node. + + + + + Gets an of + elements containing all node children. + + The Collection of child nodes. + + + + Gets an of the configuration attributes. + + + + + Gets the value of the node and converts it + into specified . + + The + + The Default value returned if the convertion fails. + + The Value converted into the specified type. + + + + Gets the name of the . + + + The Name of the . + + + + + Gets the value of . + + + The Value of the . + + + + + Gets all child nodes. + + The of child nodes. + + + + Gets node attributes. + + + All attributes of the node. + + + + + A collection of objects. + + + + + Creates a new instance of ConfigurationCollection. + + + + + Creates a new instance of ConfigurationCollection. + + + + + Creates a new instance of ConfigurationCollection. + + + + + Adds an . + + The to add. + + The index at which the new element was inserted. + + + + + Adds an array of . + + The Array of to add. + + + + Adds a . + + The to add. + + + + Copies the elements to a one-dimensional instance at the specified index. + + + The one-dimensional must have zero-based indexing. + + The zero-based index in array at which copying begins. + + + + Gets a value indicating whether the contains + in the collection. + + The to locate. + + if the is contained in the collection; + otherwise, . + + + + + Removes a specific from the + collection. + + The to remove from the collection. + + is not found in the collection. + + + + + Represents the entry at the specified index of the . + + + The zero-based index of the entry to locate in the collection. + + + The entry at the specified index of the collection. + + + is outside the valid range of indexes for the collection. + + + + + Summary description for MutableConfiguration. + + + + + Initializes a new instance of the class. + + The name. + + + + Enumeration used to mark the component's lifestyle. + + + + + No lifestyle specified. + + + + + Singleton components are instantiated once, and shared + between all clients. + + + + + Thread components have a unique instance per thread. + + + + + Transient components are created on demand. + + + + + Optimization of transient components that keeps + instance in a pool instead of always creating them. + + + + + Any other logic to create/release components. + + + + + PerWebRequest components are created once per Http Request + + + + + + + + + + Represents the collection of information and + meta information collected about a component. + + + + Name (key) of the component + + + Service exposed + + + Implementation for the service + + + Extended properties + + + Lifestyle for the component + + + Custom lifestyle, if any + + + Custom activator, if any + + + Dependencies the kernel must resolve + + + All available constructors + + + All potential properties that can be setted by the kernel + + + Steps of lifecycle + + + External parameters + + + Configuration node associated + + + Interceptors associated + + + + Constructs a ComponentModel + + + + + Sets or returns the component key + + + + + Gets or sets the service exposed. + + The service. + + + + Gets or sets the component implementation. + + The implementation. + + + + Gets or sets a value indicating whether the component requires generic arguments. + + + true if generic arguments are required; otherwise, false. + + + + + Gets or sets the extended properties. + + The extended properties. + + + + Gets the constructors candidates. + + The constructors. + + + + Gets the properties set. + + The properties. + + + + Gets or sets the configuration. + + The configuration. + + + + Gets the lifecycle steps. + + The lifecycle steps. + + + + Gets or sets the lifestyle type. + + The type of the lifestyle. + + + + Gets or sets the strategy for + inspecting public properties + on the components + + + + + Gets or sets the custom lifestyle. + + The custom lifestyle. + + + + Gets or sets the custom component activator. + + The custom component activator. + + + + Gets the interceptors. + + The interceptors. + + + + Gets the parameter collection. + + The parameters. + + + + Dependencies are kept within constructors and + properties. Others dependencies must be + registered here, so the kernel (as a matter + of fact the handler) can check them + + + + + Represents a constructor of the component + that the container can use to initialize it properly. + + + + + Initializes a new instance of the class. + + The constructor info. + The dependencies. + + + + Gets the ConstructorInfo (from reflection). + + The constructor. + + + + Gets the dependencies this constructor candidate exposes. + + The dependencies. + + + + Collection of + + + + + Adds the specified candidate. + + The candidate. + + + + Clears this instance. + + + + + Gets the fewer arguments candidate. + + The fewer arguments candidate. + + + + Represents a dependency (other component or a + fixed value available through external configuration). + + + + + Initializes a new instance of the class. + + The type. + The dependency key. + Type of the target. + if set to true [is optional]. + + + + Returns a that represents the current . + + + A that represents the current . + + + + + Serves as a hash function for a particular type, suitable + for use in hashing algorithms and data structures like a hash table. + + + A hash code for the current . + + + + + Determines whether the specified is equal to the current . + + The to compare with the current . + + if the specified is equal to the + current ; otherwise, . + + + + + Gets or sets the type of the dependency. + + The type of the dependency. + + + + Gets or sets the dependency key. + + The dependency key. + + + + Gets the type of the target. + + The type of the target. + + + + Gets or sets whether this dependency is optional. + + + true if this dependency is optional; otherwise, false. + + + + + Collection of . + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The dependencies. + + + + Initializes a new instance of the class. + + The dependencies. + + + + Adds the specified model. + + The model. + + + + Removes the specified model. + + The model. + + + + Clears this instance. + + + + + Determines whether this collection contains the the specified model. + + The model. + + true if the collection contains the specified model; otherwise, false. + + + + + Represents an reference to a Interceptor component. + + + + + Initializes a new instance of the class. + + The component key. + + + + Initializes a new instance of the class. + + Type of the service. + + + + Gets the type of the service. + + The type of the service. + + + + Gets the interceptor component key. + + The component key. + + + + Gets the type of the reference. + + The type of the reference. + + + + Collection of + + + + + Adds the specified interceptor. + + The interceptor. + + + + Adds the the specified interceptor as the first. + + The interceptor. + + + + Adds the the specified interceptor as the last. + + The interceptor. + + + + Inserts the specified interceptor at the specified index. + + The index. + The interceptor. + + + + When implemented by a class, copies the elements of + the to an , starting at a particular index. + + The one-dimensional that is the destination of the elements copied from . The must have zero-based indexing. + The zero-based index in at which copying begins. + + is . + + is less than zero. + + + is multidimensional. + -or- + + is equal to or greater than the length of . + -or- + The number of elements in the source is greater than the available space from to the end of the destination . + + The type of the source cannot be cast automatically to the type of the destination . + + + + Returns an enumerator that can iterate through a collection. + + + An + that can be used to iterate through the collection. + + + + + Gets a value indicating whether this instance has interceptors. + + + true if this instance has interceptors; otherwise, false. + + + + + Gets the number of + elements contained in the . + + + + + + Gets an object that + can be used to synchronize access to the . + + + + + + Gets a value + indicating whether access to the is synchronized + (thread-safe). + + + + + + Represents a collection of ordered lifecycle steps. + + + + + Initializes a new instance of the class. + + + + + Returns all steps for the commission phase + + + + + + Returns all steps for the decommission phase + + + + + + Adds a step to the commission or decomission phases. + + + + + + + Copies the elements of + the to an , starting at a particular index. + + The one-dimensional that is the destination of the elements copied from . The must have zero-based indexing. + The zero-based index in at which copying begins. + + is . + + is less than zero. + + + is multidimensional. + -or- + + is equal to or greater than the length of . + -or- + The number of elements in the source is greater than the available space from to the end of the destination . + + The type of the source cannot be cast automatically to the type of the destination . + + + + Returns an enumerator that can iterate through a collection. + + + An + that can be used to iterate through the collection. + + + + + Gets a value indicating whether this instance has commission steps. + + + true if this instance has commission steps; otherwise, false. + + + + + Gets a value indicating whether this instance has decommission steps. + + + true if this instance has decommission steps; otherwise, false. + + + + + Gets the number of + elements contained in the . + + + + + + Gets an object that + can be used to synchronize access to the . + + + + + + Gets a value + indicating whether access to the is synchronized + (thread-safe). + + + + + + Represents meta information associated with a method + (not yet defined) + + + + + Initializes a new instance of the class. + + The config node. + + + + Gets the config node. + + The config node. + + + + Collection of + + + + + Adds the specified model. + + The model. + + + + Gets the method info2 model. + + The method info2 model. + + + + Represents a parameter. Usually the parameter + comes from the external world, ie, an external configuration. + + + + + Initializes a new instance of the class. + + The name. + The value. + + + + Initializes a new instance of the class. + + The name. + The value. + + + + Gets the name. + + The name. + + + + Gets the value. + + The value. + + + + Gets the config value. + + The config value. + + + + Collection of + + + + + Initializes a new instance of the class. + + + + + Adds the specified name. + + The name. + The value. + + + + Adds the specified name. + + The name. + The config node. + + + + Determines whether this collection contains the specified key. + + The key. + + true if yes; otherwise, false. + + + + + Adds the specified key. + + + Not implemented + + The key. + The value. + + + + Clears this instance. + + + Not implemented + + + + + Removes the specified key. + + The key. + + Not implemented + + + + + Copy the content to the specified array + + target array + target index + + Not implemented + + + + + Returns an enumerator that can iterate through a collection. + + + An + that can be used to iterate through the collection. + + + + + Gets the keys. + + The keys. + + Not implemented + + + + + Gets the values. + + The values. + + Not implemented + + + + + Gets a value indicating whether this instance is read only. + + + true if this instance is read only; otherwise, false. + + + + + Gets a value indicating whether this instance is fixed size. + + + true if this instance is fixed size; otherwise, false. + + + + + Gets the with the specified key. + + + + + + Gets the count. + + The count. + + + + Gets the sync root. + + The sync root. + + + + Gets a value indicating whether this instance is synchronized. + + + true if this instance is synchronized; otherwise, false. + + + + + Represents a property and the respective dependency. + + + + + Initializes a new instance of the class. + + The property info. + The dependency. + + + + Gets the property. + + The property. + + + + Gets the dependency. + + The dependency. + + + + Collection of + + + + + Adds the specified property. + + The property. + + + + Clears this instance. + + + + + Finds a PropertySet the by PropertyInfo. + + The info. + + + + + Represents a 'streamable' resource. Can + be a file, a resource in an assembly. + + + + + Returns a reader for the stream + + + It's up to the caller to dispose the reader. + + + + + + Returns a reader for the stream + + + It's up to the caller to dispose the reader. + + + + + + + Returns an instance of + created according to the relativePath + using itself as the root. + + + + + + + + + + Only valid for resources that + can be obtained through relative paths + + + + + + + + + + Do not allow closing and disposal of the + underlying . + + + + + + + + + + Depicts the contract for resource factories. + + + + + Used to check whether the resource factory + is able to deal with the given resource + identifier. + + + Implementors should return true + only if the given identificator is supported + by the resource factory + + + + + + + Creates an instance + for the given resource identifier + + + + + + + Creates an instance + for the given resource identifier + + + + + + + + + + + + + + + + + + Adapts a static string content as an + + + + + Enable access to files on network shares + + + + + Defines that the implementation wants a + in order to + access other components. The creator must be aware + that the component might (or might not) implement + the interface. + + + Used by Castle Project components to, for example, + gather logging factories + + + + + Increments IServiceProvider with a generic service resolution operation. + + + + + This interface should be implemented by classes + that are available in a bigger context, exposing + the container to different areas in the same application. + + For example, in Web application, the (global) HttpApplication + subclasses should implement this interface to expose + the configured container + + + + + + General purpose class to represent a standard pair of values. + + Type of the first value + Type of the second value + + + + Constructs a pair with its values + + + + + + diff --git a/tools/NHibernate/Castle.DynamicProxy.license.txt b/tools/NHibernate/Castle.DynamicProxy.license.txt new file mode 100644 index 000000000..b75309100 --- /dev/null +++ b/tools/NHibernate/Castle.DynamicProxy.license.txt @@ -0,0 +1,13 @@ +Copyright 2004-2005 Castle Project - http://www.castleproject.org/ + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. diff --git a/tools/NHibernate/Castle.DynamicProxy2.dll b/tools/NHibernate/Castle.DynamicProxy2.dll new file mode 100644 index 000000000..0e71971e7 Binary files /dev/null and b/tools/NHibernate/Castle.DynamicProxy2.dll differ diff --git a/tools/NHibernate/Castle.DynamicProxy2.xml b/tools/NHibernate/Castle.DynamicProxy2.xml new file mode 100644 index 000000000..dbaa6bc5a --- /dev/null +++ b/tools/NHibernate/Castle.DynamicProxy2.xml @@ -0,0 +1,635 @@ + + + + Castle.DynamicProxy2 + + + + + Wraps a reference that is passed + ByRef and provides indirect load/store support. + + + + + Summary description for NewArrayExpression. + + + + + + + + + + Here we try to match a constructor argument to its value. + Since we can't get the values from the assembly, we use some heuristics to get it. + a/ we first try to match all the properties on the attributes by name (case insensitive) to the argument + b/ if we fail we try to match them by property type, with some smarts about convertions (i,e: can use Guid for string). + + + + + We have the following rules here. + Try to find a matching type, failing that, if the parameter is string, get the first property (under the assumption that + we can convert it. + + + + + Attributes can only accept simple types, so we return null for null, + if the value is passed as string we call to string (should help with converting), + otherwise, we use the value as is (enums, integer, etc). + + + + + Provides appropriate Ldc.X opcode for the type of primitive value to be loaded. + + + + + Provides appropriate Ldind.X opcode for + the type of primitive value to be loaded indirectly. + + + + + Inspect the base method for generic definitions + and set the return type and the parameters + accordingly + + + + + Emits a load opcode of the appropriate kind for a constant string or + primitive value. + + + + + + + Emits a load opcode of the appropriate kind for the constant default value of a + type, such as 0 for value types and null for reference types. + + + + + Emits a load indirect opcode of the appropriate type for a value or object reference. + Pops a pointer off the evaluation stack, dereferences it and loads + a value of the specified type. + + + + + + + Emits a store indirectopcode of the appropriate type for a value or object reference. + Pops a value of the specified type and a pointer off the evaluation stack, and + stores the value. + + + + + + + Summary description for PropertiesCollection. + + + + + Provides appropriate Stind.X opcode + for the type of primitive value to be stored indirectly. + + + + + Base class that exposes the common functionalities + to proxy generation. + + + TODO: + - Use the interceptor selector if provided + - Add tests and fixes for 'leaking this' problem + - Mixin support + + + + + Used by dinamically implement + + + + + + Generates a parameters constructor that initializes the proxy + state with just to make it non-null. + + This constructor is important to allow proxies to be XML serializable + + + + + + If callbackMethod is null the InvokeOnTarget implementation + is just the code to throw an exception + + + + + + + + + + + + If callbackMethod is null the InvokeOnTarget implementation + is just the code to throw an exception + + + + + + + + If true the invocation will implement the IChangeProxyTarget interface + + + + + Generates the constructor for the nested class that extends + + + + + + + + + + Improvement: this cache should be static. We should generate a + type constructor instead + + + + + Performs some basic screening and invokes the + to select methods. + + + + + + + + Checks if the method is public or protected. + + + + + + + Attributes should be replicated if they are non-inheritable, + but there are some special cases where the attributes means + something to the CLR, where they should be skipped. + + + + + Checks if the method has the same signature as a method that was marked as + one that should generate a new vtable slot. + + + + + Initializes a new instance of the class. + + Type of the target. + The interfaces. + The options. + + + + + + + + + Initializes a new instance of the class. + + The emitter. + The add method. + The remove method. + The attributes. + + + + + + + + + Finds the type of the method on target. + + The method on interface. + Type of the proxy target. + + + + + Checks whether the given types are the same. This is + more complicated than it looks. + + + + + + + + This is used by the ProxyObjectReference class durin de-serialiation, to know + which generator it should use + + + + + Returns the methods implemented by a type. Use this instead of Type.GetMethods() to work around a CLR issue + where duplicate MethodInfos are returned by Type.GetMethods() after a token of a generic type's method was loaded. + + + + + Handles the deserialization of proxies. + + + + + Usefull for test cases + + + + + Used during the target type inspection process. + Implementors have a chance to interfere in the + proxy generation process + + + + + Invoked by the generation process to know if + the specified member should be proxied + + + + + + + + Invoked by the generation process to notify that a + member wasn't marked as virtual. + + + + + + + Invoked by the generation process to notify + that the whole process is completed. + + + + + Abstracts the implementation of proxy constructions + + + + + Implementors should return a proxy for the specified type. + + The proxy base class. + The proxy generation options. + The generated proxy type. + + + + Implementors should return a proxy for the specified + type and interfaces. The interfaces must be only "mark" interfaces + + + + + + + + + Implementors should return a proxy for the specified + interface that 'proceeds' executions to the + specified target. + + + + + + + + + + Implementors should return a proxy for the specified + interface that delegate all executions to the + specified interceptor(s). + + + + + + + + + Implementors should return a proxy for the specified + interface that delegate all executions to the + specified interceptor(s) and uses an instance of the interface + as their targets, rather than a class. All IInvocation's + should then implement IChangeProxyTarget. + + + + + + + + Gets the module scope used by this builder for generating code. + + The module scope used by this builder. + + + + Determines whether this assembly has internals visisble to dynamic proxy. + + The asm. + + + + Determines whether the specified method is internal. + + The method. + + true if the specified method is internal; otherwise, false. + + + + + Summary description for ModuleScope. + + + + + The default file name used when the assembly is saved using . + + + + + The default assembly (simple) name used for the assemblies generated by a instance. + + + + + Initializes a new instance of the class; assemblies created by this instance will not be saved. + + + + + Initializes a new instance of the class, allowing to specify whether the assemblies generated by this instance + should be saved. + + If set to true saves the generated module. + + + + Initializes a new instance of the class, allowing to specify whether the assemblies generated by this instance + should be saved and what simple names are to be assigned to them. + + If set to true saves the generated module. + The simple name of the strong-named assembly generated by this . + The path and file name of the manifest module of the strong-named assembly generated by this . + The simple name of the weak-named assembly generated by this . + The path and file name of the manifest module of the weak-named assembly generated by this . + + + + Returns a type from this scope's type cache, or null if the key cannot be found. + + The key to be looked up in the cache. + The type from this scope's type cache matching the key, or null if the key cannot be found + + + + Registers a type in this scope's type cache. + + The key to be associated with the type. + The type to be stored in the cache. + + + + Gets the key pair used to sign the strong-named assembly generated by this . + + + + + + Gets the specified module generated by this scope, creating a new one if none has yet been generated. + + If set to true, a strong-named module is returned; otherwise, a weak-named module is returned. + A strong-named or weak-named module generated by this scope, as specified by the parameter. + + + + Gets the strong-named module generated by this scope, creating a new one if none has yet been generated. + + A strong-named module generated by this scope. + + + + Gets the weak-named module generated by this scope, creating a new one if none has yet been generated. + + A weak-named module generated by this scope. + + + + Saves the generated assembly with the name and directory information given when this instance was created (or with + the and current directory if none was given). + + + + This method stores the generated assembly in the directory passed as part of the module information specified when this instance was + constructed (if any, else the current directory is used). If both a strong-named and a weak-named assembly + have been generated, it will throw an exception; in this case, use the overload. + + + If this was created without indicating that the assembly should be saved, this method does nothing. + + Both a strong-named and a weak-named assembly have been generated or no assembly has been + generated. + + + + Saves the specified generated assembly with the name and directory information given when this instance was created + (or with the and current directory if none was given). + + True if the generated assembly with a strong name should be saved (see ); + false if the generated assembly without a strong name should be saved (see . + + + This method stores the specified generated assembly in the directory passed as part of the module information specified when this instance was + constructed (if any, else the current directory is used). + + + If this was created without indicating that the assembly should be saved, this method does nothing. + + + No assembly has been generated that matches the parameter. + + + + + Users of this should use this lock when accessing the cache. + + + + + Gets the strong-named module generated by this scope, or if none has yet been generated. + + The strong-named module generated by this scope, or if none has yet been generated. + + + + Gets the file name of the strongly named module generated by this scope. + + The file name of the strongly named module generated by this scope. + + + + Gets the directory where the strongly named module generated by this scope will be saved, or if the current directory + is used. + + The directory where the strongly named module generated by this scope will be saved when is called + (if this scope was created to save modules). + + + + Gets the weak-named module generated by this scope, or if none has yet been generated. + + The weak-named module generated by this scope, or if none has yet been generated. + + + + Gets the file name of the weakly named module generated by this scope. + + The file name of the weakly named module generated by this scope. + + + + Gets the directory where the weakly named module generated by this scope will be saved, or if the current directory + is used. + + The directory where the weakly named module generated by this scope will be saved when is called + (if this scope was created to save modules). + + + + ProxyBuilder that persists the generated type. + + + The saved assembly contains just the last generated type. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The hook. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The builder. + + + + Initializes a new instance of the class. + + + + + Creates the class proxy. + + Type of the target. + The interfaces. + The interceptors. + + + + + Creates the class proxy. + + Type of the target. + The interceptors. + The constructor args. + + + + + + + + + + + + + + Creates the class proxy. + + Type of the target. + The interfaces. + The options. + The constructor args. + The interceptors. + + + + + Gets the proxy builder instance. + + The proxy builder. + + + + + + + + + + + + + + + For interface proxies, this will point to the + on the target class + + + + diff --git a/tools/NHibernate/Iesi.Collections.Test.dll b/tools/NHibernate/Iesi.Collections.Test.dll new file mode 100644 index 000000000..d57fa883d Binary files /dev/null and b/tools/NHibernate/Iesi.Collections.Test.dll differ diff --git a/tools/NHibernate/Iesi.Collections.Test.dll-results.xml b/tools/NHibernate/Iesi.Collections.Test.dll-results.xml new file mode 100644 index 000000000..b89a7c774 --- /dev/null +++ b/tools/NHibernate/Iesi.Collections.Test.dll-results.xml @@ -0,0 +1,211 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tools/NHibernate/Iesi.Collections.Test.pdb b/tools/NHibernate/Iesi.Collections.Test.pdb new file mode 100644 index 000000000..a8436e4b0 Binary files /dev/null and b/tools/NHibernate/Iesi.Collections.Test.pdb differ diff --git a/tools/NHibernate/Iesi.Collections.dll b/tools/NHibernate/Iesi.Collections.dll new file mode 100644 index 000000000..41c44c9d2 Binary files /dev/null and b/tools/NHibernate/Iesi.Collections.dll differ diff --git a/tools/NHibernate/Iesi.Collections.license.txt b/tools/NHibernate/Iesi.Collections.license.txt new file mode 100644 index 000000000..66c4a8dc5 --- /dev/null +++ b/tools/NHibernate/Iesi.Collections.license.txt @@ -0,0 +1,9 @@ +Copyright © 2002-2004 by Aidant Systems, Inc., and by Jason Smith. + +Copied from http://www.codeproject.com/csharp/sets.asp#xx703510xx that was posted by JasonSmith 12:13 2 Jan '04 + +Feel free to use this code any way you want to. As a favor to me, you can leave the copyright in there. You never know when someone might recognize your name! + +If you do use the code in a commercial product, I would appreciate hearing about it. This message serves as legal notice that I won't be suing you for royalties! The code is in the public domain. + +On the other hand, I don't provide support. The code is actually simple enough that it shouldn't need it. diff --git a/tools/NHibernate/Iesi.Collections.pdb b/tools/NHibernate/Iesi.Collections.pdb new file mode 100644 index 000000000..db737f52e Binary files /dev/null and b/tools/NHibernate/Iesi.Collections.pdb differ diff --git a/tools/NHibernate/Iesi.Collections.xml b/tools/NHibernate/Iesi.Collections.xml new file mode 100644 index 000000000..587094a3b --- /dev/null +++ b/tools/NHibernate/Iesi.Collections.xml @@ -0,0 +1,1887 @@ + + + + Iesi.Collections + + + + +

DictionarySet is an abstract class that supports the creation of new Set + types where the underlying data store is an IDictionary instance.

+ +

You can use any object that implements the IDictionary interface to hold set data. + You can define your own, or you can use one of the objects provided in the Framework. + The type of IDictionary you choose will affect both the performance and the behavior + of the Set using it.

+ +

To make a Set typed based on your own IDictionary, simply derive a + new class with a constructor that takes no parameters. Some Set implmentations + cannot be defined with a default constructor. If this is the case for your class, + you will need to override Clone() as well.

+ +

It is also standard practice that at least one of your constructors takes an ICollection or + an ISet as an argument.

+
+
+ +

A collection that contains no duplicate elements. This class models the mathematical + Set abstraction, and is the base class for all other Set implementations. + The order of elements in a set is dependant on (a)the data-structure implementation, and + (b)the implementation of the various Set methods, and thus is not guaranteed.

+ +

None of the Set implementations in this library are guranteed to be thread-safe + in any way unless wrapped in a SynchronizedSet.

+ +

The following table summarizes the binary operators that are supported by the Set class.

+ + + Operation + Description + Method + Operator + + + Union (OR) + Element included in result if it exists in either A OR B. + Union() + | + + + Intersection (AND) + Element included in result if it exists in both A AND B. + InterSect() + & + + + Exclusive Or (XOR) + Element included in result if it exists in one, but not both, of A and B. + ExclusiveOr() + ^ + + + Minus (n/a) + Take all the elements in A. Now, if any of them exist in B, remove + them. Note that unlike the other operators, A - B is not the same as B - A. + Minus() + - + + +
+
+ + +

A collection that contains no duplicate elements. This interface models the mathematical + Set abstraction. + The order of elements in a set is dependant on (a)the data-structure implementation, and + (b)the implementation of the various Set methods, and thus is not guaranteed.

+ +

None of the Set implementations in this library are guranteed to be thread-safe + in any way unless wrapped in a SynchronizedSet.

+ +

The following table summarizes the binary operators that are supported by the Set class.

+ + + Operation + Description + Method + + + Union (OR) + Element included in result if it exists in either A OR B. + Union() + + + Intersection (AND) + Element included in result if it exists in both A AND B. + InterSect() + + + Exclusive Or (XOR) + Element included in result if it exists in one, but not both, of A and B. + ExclusiveOr() + + + Minus (n/a) + Take all the elements in A. Now, if any of them exist in B, remove + them. Note that unlike the other operators, A - B is not the same as B - A. + Minus() + + +
+
+ + + Performs a "union" of the two sets, where all the elements + in both sets are present. That is, the element is included if it is in either a or b. + Neither this set nor the input set are modified during the operation. The return value + is a Clone() of this set with the extra elements added in. + + A collection of elements. + A new Set containing the union of this Set with the specified collection. + Neither of the input objects is modified by the union. + + + + Performs an "intersection" of the two sets, where only the elements + that are present in both sets remain. That is, the element is included if it exists in + both sets. The Intersect() operation does not modify the input sets. It returns + a Clone() of this set with the appropriate elements removed. + + A set of elements. + The intersection of this set with a. + + + + Performs a "minus" of set b from set a. This returns a set of all + the elements in set a, removing the elements that are also in set b. + The original sets are not modified during this operation. The result set is a Clone() + of this Set containing the elements from the operation. + + A set of elements. + A set containing the elements from this set with the elements in a removed. + + + + Performs an "exclusive-or" of the two sets, keeping only the elements that + are in one of the sets, but not in both. The original sets are not modified + during this operation. The result set is a Clone() of this set containing + the elements from the exclusive-or operation. + + A set of elements. + A set containing the result of a ^ b. + + + + Returns if the set contains all the elements in the specified collection. + + A collection of objects. + if the set contains all the elements in the specified collection, otherwise. + + + + Adds the specified element to this set if it is not already present. + + The object to add to the set. + is the object was added, if it was already present. + + + + Adds all the elements in the specified collection to the set if they are not already present. + + A collection of objects to add to the set. + is the set changed as a result of this operation, if not. + + + + Remove all the specified elements from this set, if they exist in this set. + + A collection of elements to remove. + if the set was modified as a result of this operation. + + + + Retains only the elements in this set that are contained in the specified collection. + + Collection that defines the set of elements to be retained. + if this set changed as a result of this operation. + + + + Returns if this set contains no elements. + + + + +

A collection that contains no duplicate elements. This interface models the mathematical + Set abstraction. + The order of elements in a set is dependant on (a)the data-structure implementation, and + (b)the implementation of the various Set methods, and thus is not guaranteed.

+ +

None of the Set implementations in this library are guranteed to be thread-safe + in any way unless wrapped in a SynchronizedSet.

+ +

The following table summarizes the binary operators that are supported by the Set class.

+ + + Operation + Description + Method + + + Union (OR) + Element included in result if it exists in either A OR B. + Union() + + + Intersection (AND) + Element included in result if it exists in both A AND B. + InterSect() + + + Exclusive Or (XOR) + Element included in result if it exists in one, but not both, of A and B. + ExclusiveOr() + + + Minus (n/a) + Take all the elements in A. Now, if any of them exist in B, remove + them. Note that unlike the other operators, A - B is not the same as B - A. + Minus() + + +
+
+ + + Performs a "union" of the two sets, where all the elements + in both sets are present. That is, the element is included if it is in either a or b. + Neither this set nor the input set are modified during the operation. The return value + is a Clone() of this set with the extra elements added in. + + A collection of elements. + A new Set containing the union of this Set with the specified collection. + Neither of the input objects is modified by the union. + + + + Performs an "intersection" of the two sets, where only the elements + that are present in both sets remain. That is, the element is included if it exists in + both sets. The Intersect() operation does not modify the input sets. It returns + a Clone() of this set with the appropriate elements removed. + + A set of elements. + The intersection of this set with a. + + + + Performs a "minus" of set b from set a. This returns a set of all + the elements in set a, removing the elements that are also in set b. + The original sets are not modified during this operation. The result set is a Clone() + of this Set containing the elements from the operation. + + A set of elements. + A set containing the elements from this set with the elements in a removed. + + + + Performs an "exclusive-or" of the two sets, keeping only the elements that + are in one of the sets, but not in both. The original sets are not modified + during this operation. The result set is a Clone() of this set containing + the elements from the exclusive-or operation. + + A set of elements. + A set containing the result of a ^ b. + + + + Returns if this set contains the specified element. + + The element to look for. + if this set contains the specified element, otherwise. + + + + Returns if the set contains all the elements in the specified collection. + + A collection of objects. + if the set contains all the elements in the specified collection, otherwise. + + + + Adds the specified element to this set if it is not already present. + + The object to add to the set. + is the object was added, if it was already present. + + + + Adds all the elements in the specified collection to the set if they are not already present. + + A collection of objects to add to the set. + is the set changed as a result of this operation, if not. + + + + Removes the specified element from the set. + + The element to be removed. + if the set contained the specified element, otherwise. + + + + Remove all the specified elements from this set, if they exist in this set. + + A collection of elements to remove. + if the set was modified as a result of this operation. + + + + Retains only the elements in this set that are contained in the specified collection. + + Collection that defines the set of elements to be retained. + if this set changed as a result of this operation. + + + + Removes all objects from the set. + + + + + Returns if this set contains no elements. + + + + + Performs a "union" of the two sets, where all the elements + in both sets are present. That is, the element is included if it is in either a or b. + Neither this set nor the input set are modified during the operation. The return value + is a Clone() of this set with the extra elements added in. + + A collection of elements. + A new Set containing the union of this Set with the specified collection. + Neither of the input objects is modified by the union. + + + + Performs a "union" of two sets, where all the elements + in both are present. That is, the element is included if it is in either a or b. + The return value is a Clone() of one of the sets (a if it is not ) with elements of the other set + added in. Neither of the input sets is modified by the operation. + + A set of elements. + A set of elements. + A set containing the union of the input sets. if both sets are . + + + + Performs a "union" of two sets, where all the elements + in both are present. That is, the element is included if it is in either a or b. + The return value is a Clone() of one of the sets (a if it is not ) with elements of the other set + added in. Neither of the input sets is modified by the operation. + + A set of elements. + A set of elements. + A set containing the union of the input sets. if both sets are . + + + + Performs an "intersection" of the two sets, where only the elements + that are present in both sets remain. That is, the element is included if it exists in + both sets. The Intersect() operation does not modify the input sets. It returns + a Clone() of this set with the appropriate elements removed. + + A set of elements. + The intersection of this set with a. + + + + Performs an "intersection" of the two sets, where only the elements + that are present in both sets remain. That is, the element is included only if it exists in + both a and b. Neither input object is modified by the operation. + The result object is a Clone() of one of the input objects (a if it is not ) containing the + elements from the intersect operation. + + A set of elements. + A set of elements. + The intersection of the two input sets. if both sets are . + + + + Performs an "intersection" of the two sets, where only the elements + that are present in both sets remain. That is, the element is included only if it exists in + both a and b. Neither input object is modified by the operation. + The result object is a Clone() of one of the input objects (a if it is not ) containing the + elements from the intersect operation. + + A set of elements. + A set of elements. + The intersection of the two input sets. if both sets are . + + + + Performs a "minus" of set b from set a. This returns a set of all + the elements in set a, removing the elements that are also in set b. + The original sets are not modified during this operation. The result set is a Clone() + of this Set containing the elements from the operation. + + A set of elements. + A set containing the elements from this set with the elements in a removed. + + + + Performs a "minus" of set b from set a. This returns a set of all + the elements in set a, removing the elements that are also in set b. + The original sets are not modified during this operation. The result set is a Clone() + of set a containing the elements from the operation. + + A set of elements. + A set of elements. + A set containing A - B elements. if a is . + + + + Performs a "minus" of set b from set a. This returns a set of all + the elements in set a, removing the elements that are also in set b. + The original sets are not modified during this operation. The result set is a Clone() + of set a containing the elements from the operation. + + A set of elements. + A set of elements. + A set containing A - B elements. if a is . + + + + Performs an "exclusive-or" of the two sets, keeping only the elements that + are in one of the sets, but not in both. The original sets are not modified + during this operation. The result set is a Clone() of this set containing + the elements from the exclusive-or operation. + + A set of elements. + A set containing the result of a ^ b. + + + + Performs an "exclusive-or" of the two sets, keeping only the elements that + are in one of the sets, but not in both. The original sets are not modified + during this operation. The result set is a Clone() of one of the sets + (a if it is not ) containing + the elements from the exclusive-or operation. + + A set of elements. + A set of elements. + A set containing the result of a ^ b. if both sets are . + + + + Performs an "exclusive-or" of the two sets, keeping only the elements that + are in one of the sets, but not in both. The original sets are not modified + during this operation. The result set is a Clone() of one of the sets + (a if it is not ) containing + the elements from the exclusive-or operation. + + A set of elements. + A set of elements. + A set containing the result of a ^ b. if both sets are . + + + + Adds the specified element to this set if it is not already present. + + The object to add to the set. + is the object was added, if it was already present. + + + + Adds all the elements in the specified collection to the set if they are not already present. + + A collection of objects to add to the set. + is the set changed as a result of this operation, if not. + + + + Removes all objects from the set. + + + + + Returns if this set contains the specified element. + + The element to look for. + if this set contains the specified element, otherwise. + + + + Returns if the set contains all the elements in the specified collection. + + A collection of objects. + if the set contains all the elements in the specified collection, otherwise. + + + + Removes the specified element from the set. + + The element to be removed. + if the set contained the specified element, otherwise. + + + + Remove all the specified elements from this set, if they exist in this set. + + A collection of elements to remove. + if the set was modified as a result of this operation. + + + + Retains only the elements in this set that are contained in the specified collection. + + Collection that defines the set of elements to be retained. + if this set changed as a result of this operation. + + + + Returns a clone of the Set instance. This will work for derived Set + classes if the derived class implements a constructor that takes no arguments. + + A clone of this object. + + + + Copies the elements in the Set to an array. The type of array needs + to be compatible with the objects in the Set, obviously. + + An array that will be the target of the copy operation. + The zero-based index where copying will start. + + + + Gets an enumerator for the elements in the Set. + + An IEnumerator over the elements in the Set. + + + + Performs CopyTo when called trhough non-generic ISet (ICollection) interface + + + + + + + Performs Union when called trhough non-generic ISet interface + + + + + + + Performs Minus when called trhough non-generic ISet interface + + + + + + + Performs Intersect when called trhough non-generic ISet interface + + + + + + + Performs ExclusiveOr when called trhough non-generic ISet interface + + + + + + + Returns if this set contains no elements. + + + + + The number of elements currently contained in this collection. + + + + + Returns if the Set is synchronized across threads. Note that + enumeration is inherently not thread-safe. Use the SyncRoot to lock the + object during enumeration. + + + + + An object that can be used to synchronize this collection to make it thread-safe. + When implementing this, if your object uses a base object, like an IDictionary, + or anything that has a SyncRoot, return that object instead of "this". + + + + + Indicates whether the given instance is read-only or not + + + if the ISet is read-only; otherwise, . + In the default implementation of Set, this property always returns false. + + + + + Provides the storage for elements in the Set, stored as the key-set + of the IDictionary object. Set this object in the constructor + if you create your own Set class. + + + + + Adds the specified element to this set if it is not already present. + + The to add to the set. + is the object was added, if it was already present. + + + + Adds all the elements in the specified collection to the set if they are not already present. + + A collection of objects to add to the set. + is the set changed as a result of this operation, if not. + + + + Removes all objects from the set. + + + + + Returns if this set contains the specified element. + + The element to look for. + if this set contains the specified element, otherwise. + + + + Returns if the set contains all the elements in the specified collection. + + A collection of objects. + if the set contains all the elements in the specified collection, otherwise. + + + + Removes the specified element from the set. + + The element to be removed. + if the set contained the specified element, otherwise. + + + + Remove all the specified elements from this set, if they exist in this set. + + A collection of elements to remove. + if the set was modified as a result of this operation. + + + + Retains only the elements in this set that are contained in the specified collection. + + Collection that defines the set of elements to be retained. + if this set changed as a result of this operation. + + + + Copies the elements in the Set to an array of T. The type of array needs + to be compatible with the objects in the Set, obviously. + + An array that will be the target of the copy operation. + The zero-based index where copying will start. + + + + Gets an enumerator for the elements in the Set. + + An IEnumerator over the elements in the Set. + + + + Copies the elements in the Set to an array. The type of array needs + to be compatible with the objects in the Set, obviously. Needed for + non-generic ISet methods implementation + + An array that will be the target of the copy operation. + The zero-based index where copying will start. + + + + The placeholder object used as the value for the IDictionary instance. + + + There is a single instance of this object globally, used for all Sets. + + + + + Returns if this set contains no elements. + + + + + The number of elements contained in this collection. + + + + + None of the objects based on DictionarySet are synchronized. Use the + SyncRoot property instead. + + + + + Returns an object that can be used to synchronize the Set between threads. + + + + + Indicates wether the Set is read-only or not + + + + + Implements a Set based on a Dictionary (which is equivalent of + non-genric HashTable) This will give the best lookup, add, and remove + performance for very large data-sets, but iteration will occur in no particular order. + + + + + Creates a new set instance based on a Dictinary. + + + + + Creates a new set instance based on a Dictinary and + initializes it based on a collection of elements. + + A collection of elements that defines the initial set contents. + + + +

Implements an immutable (read-only) Set wrapper.

+

Although this is advertised as immutable, it really isn't. Anyone with access to the + basisSet can still change the data-set. So GetHashCode() is not implemented + for this Set, as is the case for all Set implementations in this library. + This design decision was based on the efficiency of not having to Clone() the + basisSet every time you wrap a mutable Set.

+
+
+ + + Constructs an immutable (read-only) Set wrapper. + + The Set that is wrapped. + + + + Adds the specified element to this set if it is not already present. + + The object to add to the set. + nothing + is always thrown + + + + Adds all the elements in the specified collection to the set if they are not already present. + + A collection of objects to add to the set. + nothing + is always thrown + + + + Removes all objects from the set. + + is always thrown + + + + Returns if this set contains the specified element. + + The element to look for. + if this set contains the specified element, otherwise. + + + + Returns if the set contains all the elements in the specified collection. + + A collection of objects. + if the set contains all the elements in the specified collection, otherwise. + + + + Removes the specified element from the set. + + The element to be removed. + nothing + is always thrown + + + + Remove all the specified elements from this set, if they exist in this set. + + A collection of elements to remove. + nothing + is always thrown + + + + Retains only the elements in this set that are contained in the specified collection. + + Collection that defines the set of elements to be retained. + nothing + is always thrown + + + + Copies the elements in the Set to an array of T. The type of array needs + to be compatible with the objects in the Set, obviously. + + An array that will be the target of the copy operation. + The zero-based index where copying will start. + + + + Gets an enumerator for the elements in the Set. + + An IEnumerator over the elements in the Set. + + + + Returns a clone of the Set instance. + + A clone of this object. + + + + Performs a "union" of the two sets, where all the elements + in both sets are present. That is, the element is included if it is in either a or b. + Neither this set nor the input set are modified during the operation. The return value + is a Clone() of this set with the extra elements added in. + + A collection of elements. + A new Set containing the union of this Set with the specified collection. + Neither of the input objects is modified by the union. + + + + Performs an "intersection" of the two sets, where only the elements + that are present in both sets remain. That is, the element is included if it exists in + both sets. The Intersect() operation does not modify the input sets. It returns + a Clone() of this set with the appropriate elements removed. + + A set of elements. + The intersection of this set with a. + + + + Performs a "minus" of set b from set a. This returns a set of all + the elements in set a, removing the elements that are also in set b. + The original sets are not modified during this operation. The result set is a Clone() + of this Set containing the elements from the operation. + + A set of elements. + A set containing the elements from this set with the elements in a removed. + + + + Performs an "exclusive-or" of the two sets, keeping only the elements that + are in one of the sets, but not in both. The original sets are not modified + during this operation. The result set is a Clone() of this set containing + the elements from the exclusive-or operation. + + A set of elements. + A set containing the result of a ^ b. + + + + Performs CopyTo when called trhough non-generic ISet (ICollection) interface + + + + + + + Performs Union when called trhough non-generic ISet interface + + + + + + + Performs Minus when called trhough non-generic ISet interface + + + + + + + Performs Intersect when called trhough non-generic ISet interface + + + + + + + Performs ExclusiveOr when called trhough non-generic ISet interface + + + + + + + Returns if this set contains no elements. + + + + + The number of elements contained in this collection. + + + + + Returns an object that can be used to synchronize use of the Set across threads. + + + + + Returns an object that can be used to synchronize the Set between threads. + + + + + Indicates that the given instance is read-only + + + + + Implements a Set based on a sorted tree. This gives good performance for operations on very + large data-sets, though not as good - asymptotically - as a HashedSet. However, iteration + occurs in order. Elements that you put into this type of collection must implement IComparable, + and they must actually be comparable. You can't mix string and int values, for example. + + + + + Creates a new set instance based on a sorted tree. + + + + + Creates a new set instance based on a sorted tree. + + The to use for sorting. + + + + Creates a new set instance based on a sorted tree and + initializes it based on a collection of elements. + + A collection of elements that defines the initial set contents. + + + + Creates a new set instance based on a sorted tree and + initializes it based on a collection of elements. + + A collection of elements that defines the initial set contents. + + + + Creates a new set instance based on a sorted tree and + initializes it based on a collection of elements. + + A collection of elements that defines the initial set contents. + The to use for sorting. + + + +

Implements a thread-safe Set wrapper. The implementation is extremely conservative, + serializing critical sections to prevent possible deadlocks, and locking on everything. + The one exception is for enumeration, which is inherently not thread-safe. For this, you + have to lock the SyncRoot object for the duration of the enumeration.

+
+
+ + + Constructs a thread-safe Set wrapper. + + The Set object that this object will wrap. + + + + Adds the specified element to this set if it is not already present. + + The object to add to the set. + is the object was added, if it was already present. + + + + Adds all the elements in the specified collection to the set if they are not already present. + + A collection of objects to add to the set. + is the set changed as a result of this operation, if not. + + + + Removes all objects from the set. + + + + + Returns if this set contains the specified element. + + The element to look for. + if this set contains the specified element, otherwise. + + + + Returns if the set contains all the elements in the specified collection. + + A collection of objects. + if the set contains all the elements in the specified collection, otherwise. + + + + Removes the specified element from the set. + + The element to be removed. + if the set contained the specified element, otherwise. + + + + Remove all the specified elements from this set, if they exist in this set. + + A collection of elements to remove. + if the set was modified as a result of this operation. + + + + Retains only the elements in this set that are contained in the specified collection. + + Collection that defines the set of elements to be retained. + if this set changed as a result of this operation. + + + + Copies the elements in the Set to an array. The type of array needs + to be compatible with the objects in the Set, obviously. + + An array that will be the target of the copy operation. + The zero-based index where copying will start. + + + + Enumeration is, by definition, not thread-safe. Use a lock on the SyncRoot + to synchronize the entire enumeration process. + + + + + + Returns a clone of the Set instance. + + A clone of this object. + + + + Performs CopyTo when called trhough non-generic ISet (ICollection) interface + + + + + + + Returns if this set contains no elements. + + + + + The number of elements contained in this collection. + + + + + Returns , indicating that this object is thread-safe. The exception to this + is enumeration, which is inherently not thread-safe. Use the SyncRoot object to + lock this object for the entire duration of the enumeration. + + + + + Returns an object that can be used to synchronize the Set between threads. + + + + + Indicates whether given instace is read-only or not + + + + +

DictionarySet is an abstract class that supports the creation of new Set + types where the underlying data store is an IDictionary instance.

+ +

You can use any object that implements the IDictionary interface to hold set data. + You can define your own, or you can use one of the objects provided in the Framework. + The type of IDictionary you choose will affect both the performance and the behavior + of the Set using it.

+ +

To make a Set typed based on your own IDictionary, simply derive a + new class with a constructor that takes no parameters. Some Set implmentations + cannot be defined with a default constructor. If this is the case for your class, + you will need to override Clone() as well.

+ +

It is also standard practice that at least one of your constructors takes an ICollection or + an ISet as an argument.

+
+
+ + A collection that contains no duplicate elements. + + + This class models the mathematical set abstraction, and is the base class for all + other set implementations. The order of elements in a set is dependant on + (a) the data-structure implementation, and (b) the implementation of the various + methods, and thus is not guaranteed. + + + None of the implementations in this library are guranteed to be thread-safe + in any way unless wrapped in a . + + + The following table summarizes the binary operators that are supported by the + type. + + + + Operation + Description + Method + Operator + + + Union (OR) + Element included in result if it exists in either A OR B. + Union() + | + + + Intersection (AND) + Element included in result if it exists in both A AND B. + InterSect() + & + + + Exclusive Or (XOR) + Element included in result if it exists in one, but not both, of A and B. + ExclusiveOr() + ^ + + + Minus (n/a) + Take all the elements in A. Now, if any of them exist in B, remove + them. Note that unlike the other operators, A - B is not the same as B - A. + Minus() + - + + + + + + + Performs a "union" of the two sets, where all the elements + in both sets are present. That is, the element is included if it is in either a or b. + Neither this set nor the input set are modified during the operation. The return value + is a clone of this set with the extra elements added in. + + A collection of elements. + A new instance containing the union of this instance with the specified collection. + Neither of the input objects is modified by the union. + + + + Performs a "union" of two sets, where all the elements + in both are present. That is, the element is included if it is in either a or b. + The return value is a clone of one of the sets (a if it is not ) with elements of the other set + added in. Neither of the input sets is modified by the operation. + + A set of elements. + A set of elements. + A set containing the union of the input sets. if both sets are . + + + + Performs a "union" of two sets, where all the elements + in both are present. That is, the element is included if it is in either a or b. + The return value is a clone of one of the sets (a if it is not ) with elements of the other set + added in. Neither of the input sets is modified by the operation. + + A set of elements. + A set of elements. + A set containing the union of the input sets. if both sets are . + + + + Performs an "intersection" of the two sets, where only the elements + that are present in both sets remain. That is, the element is included if it exists in + both sets. The Intersect() operation does not modify the input sets. It returns + a Clone() of this set with the appropriate elements removed. + + A set of elements. + The intersection of this set with a. + + + + Performs an "intersection" of the two sets, where only the elements + that are present in both sets remain. That is, the element is included only if it exists in + both a and b. Neither input object is modified by the operation. + The result object is a Clone() of one of the input objects (a if it is not ) containing the + elements from the intersect operation. + + A set of elements. + A set of elements. + The intersection of the two input sets. if both sets are . + + + + Performs an "intersection" of the two sets, where only the elements + that are present in both sets remain. That is, the element is included only if it exists in + both a and b. Neither input object is modified by the operation. + The result object is a Clone() of one of the input objects (a if it is not ) containing the + elements from the intersect operation. + + A set of elements. + A set of elements. + The intersection of the two input sets. if both sets are . + + + + Performs a "minus" of set b from set a. This returns a set of all + the elements in set a, removing the elements that are also in set b. + The original sets are not modified during this operation. The result set is a Clone() + of this Set containing the elements from the operation. + + A set of elements. + A set containing the elements from this set with the elements in a removed. + + + + Performs a "minus" of set b from set a. This returns a set of all + the elements in set a, removing the elements that are also in set b. + The original sets are not modified during this operation. The result set is a Clone() + of set a containing the elements from the operation. + + A set of elements. + A set of elements. + A set containing A - B elements. if a is . + + + + Performs a "minus" of set b from set a. This returns a set of all + the elements in set a, removing the elements that are also in set b. + The original sets are not modified during this operation. The result set is a Clone() + of set a containing the elements from the operation. + + A set of elements. + A set of elements. + A set containing A - B elements. if a is . + + + + Performs an "exclusive-or" of the two sets, keeping only the elements that + are in one of the sets, but not in both. The original sets are not modified + during this operation. The result set is a clone of this set containing + the elements from the exclusive-or operation. + + A set of elements. + A set containing the result of a ^ b. + + + + Performs an "exclusive-or" of the two sets, keeping only the elements that + are in one of the sets, but not in both. The original sets are not modified + during this operation. The result set is a clone of one of the sets + (a if it is not ) containing + the elements from the exclusive-or operation. + + A set of elements. + A set of elements. + A set containing the result of a ^ b. if both sets are . + + + + Performs an "exclusive-or" of the two sets, keeping only the elements that + are in one of the sets, but not in both. The original sets are not modified + during this operation. The result set is a clone of one of the sets + (a if it is not ) containing + the elements from the exclusive-or operation. + + A set of elements. + A set of elements. + A set containing the result of a ^ b. if both sets are . + + + + Adds the specified element to this set if it is not already present. + + The object to add to the set. + is the object was added, if it was already present. + + + + Adds all the elements in the specified collection to the set if they are not already present. + + A collection of objects to add to the set. + is the set changed as a result of this operation, if not. + + + + Removes all objects from the set. + + + + + Returns if this set contains the specified element. + + The element to look for. + if this set contains the specified element, otherwise. + + + + Returns if the set contains all the elements in the specified collection. + + A collection of objects. + if the set contains all the elements in the specified collection, otherwise. + + + + Removes the specified element from the set. + + The element to be removed. + if the set contained the specified element, otherwise. + + + + Remove all the specified elements from this set, if they exist in this set. + + A collection of elements to remove. + if the set was modified as a result of this operation. + + + + Retains only the elements in this set that are contained in the specified collection. + + Collection that defines the set of elements to be retained. + if this set changed as a result of this operation. + + + + Returns a clone of the set instance. This will work for derived set + classes if the derived class implements a constructor that takes no arguments. + + A clone of this object. + + + + Copies the elements in the set to an array. The type of array needs + to be compatible with the objects in the set, obviously. + + An array that will be the target of the copy operation. + The zero-based index where copying will start. + + + + Returns an enumerator that iterates through the set. + + + An object that can be used to iterate through the set. + + + + + Returns if this set contains no elements. + + + + + The number of elements currently contained in this collection. + + + + + Returns if the set is synchronized across threads. Note that + enumeration is inherently not thread-safe. Use the to lock the + object during enumeration. + + + + + An object that can be used to synchronize this collection to make it thread-safe. + When implementing this, if your object uses a base object, like an , + or anything that has a , return that object instead + of . + + + + + Provides the storage for elements in the Set, stored as the key-set + of the IDictionary object. Set this object in the constructor + if you create your own Set class. + + + + + Adds the specified element to this set if it is not already present. + + The object to add to the set. + is the object was added, if it was already present. + + + + Adds all the elements in the specified collection to the set if they are not already present. + + A collection of objects to add to the set. + is the set changed as a result of this operation, if not. + + + + Removes all objects from the set. + + + + + Returns if this set contains the specified element. + + The element to look for. + if this set contains the specified element, otherwise. + + + + Returns if the set contains all the elements in the specified collection. + + A collection of objects. + if the set contains all the elements in the specified collection, otherwise. + + + + Removes the specified element from the set. + + The element to be removed. + if the set contained the specified element, otherwise. + + + + Remove all the specified elements from this set, if they exist in this set. + + A collection of elements to remove. + if the set was modified as a result of this operation. + + + + Retains only the elements in this set that are contained in the specified collection. + + Collection that defines the set of elements to be retained. + if this set changed as a result of this operation. + + + + Copies the elements in the Set to an array. The type of array needs + to be compatible with the objects in the Set, obviously. + + An array that will be the target of the copy operation. + The zero-based index where copying will start. + + + + Gets an enumerator for the elements in the Set. + + An IEnumerator over the elements in the Set. + + + + The placeholder object used as the value for the IDictionary instance. + + + There is a single instance of this object globally, used for all Sets. + + + + + Returns if this set contains no elements. + + + + + The number of elements contained in this collection. + + + + + None of the objects based on DictionarySet are synchronized. Use the + SyncRoot property instead. + + + + + Returns an object that can be used to synchronize the Set between threads. + + + + + Implements a Set based on a hash table. This will give the best lookup, add, and remove + performance for very large data-sets, but iteration will occur in no particular order. + + + + + Creates a new set instance based on a hash table. + + + + + Creates a new set instance based on a hash table and + initializes it based on a collection of elements. + + A collection of elements that defines the initial set contents. + + + + Implements a Set that automatically changes from a list to a hash table + when the size reaches a certain threshold. This is good if you are unsure about + whether you data-set will be tiny or huge. Because this uses a dual implementation, + iteration order is not guaranteed! + + + + + Creates a new set instance based on either a list or a hash table, depending on which + will be more efficient based on the data-set size. + + + + + Creates a new set instance based on either a list or a hash table, depending on which + will be more efficient based on the data-set size, and + initializes it based on a collection of elements. + + A collection of elements that defines the initial set contents. + + + +

Implements an immutable (read-only) Set wrapper.

+

Although this is advertised as immutable, it really isn't. Anyone with access to the + basisSet can still change the data-set. So GetHashCode() is not implemented + for this Set, as is the case for all Set implementations in this library. + This design decision was based on the efficiency of not having to Clone() the + basisSet every time you wrap a mutable Set.

+
+
+ + + Constructs an immutable (read-only) Set wrapper. + + The Set that is wrapped. + + + + Adds the specified element to this set if it is not already present. + + The object to add to the set. + is the object was added, if it was already present. + + + + Adds all the elements in the specified collection to the set if they are not already present. + + A collection of objects to add to the set. + is the set changed as a result of this operation, if not. + + + + Removes all objects from the set. + + + + + Returns if this set contains the specified element. + + The element to look for. + if this set contains the specified element, otherwise. + + + + Returns if the set contains all the elements in the specified collection. + + A collection of objects. + if the set contains all the elements in the specified collection, otherwise. + + + + Removes the specified element from the set. + + The element to be removed. + if the set contained the specified element, otherwise. + + + + Remove all the specified elements from this set, if they exist in this set. + + A collection of elements to remove. + if the set was modified as a result of this operation. + + + + Retains only the elements in this set that are contained in the specified collection. + + Collection that defines the set of elements to be retained. + if this set changed as a result of this operation. + + + + Copies the elements in the Set to an array. The type of array needs + to be compatible with the objects in the Set, obviously. + + An array that will be the target of the copy operation. + The zero-based index where copying will start. + + + + Gets an enumerator for the elements in the Set. + + An IEnumerator over the elements in the Set. + + + + Returns a clone of the Set instance. + + A clone of this object. + + + + Performs a "union" of the two sets, where all the elements + in both sets are present. That is, the element is included if it is in either a or b. + Neither this set nor the input set are modified during the operation. The return value + is a Clone() of this set with the extra elements added in. + + A collection of elements. + A new Set containing the union of this Set with the specified collection. + Neither of the input objects is modified by the union. + + + + Performs an "intersection" of the two sets, where only the elements + that are present in both sets remain. That is, the element is included if it exists in + both sets. The Intersect() operation does not modify the input sets. It returns + a Clone() of this set with the appropriate elements removed. + + A set of elements. + The intersection of this set with a. + + + + Performs a "minus" of set b from set a. This returns a set of all + the elements in set a, removing the elements that are also in set b. + The original sets are not modified during this operation. The result set is a Clone() + of this Set containing the elements from the operation. + + A set of elements. + A set containing the elements from this set with the elements in a removed. + + + + Performs an "exclusive-or" of the two sets, keeping only the elements that + are in one of the sets, but not in both. The original sets are not modified + during this operation. The result set is a Clone() of this set containing + the elements from the exclusive-or operation. + + A set of elements. + A set containing the result of a ^ b. + + + + Returns if this set contains no elements. + + + + + The number of elements contained in this collection. + + + + + Returns an object that can be used to synchronize use of the Set across threads. + + + + + Returns an object that can be used to synchronize the Set between threads. + + + + + Implements a Set based on a list. Performance is much better for very small lists + than either HashedSet or SortedSet. However, performance degrades rapidly as + the data-set gets bigger. Use a HybridSet instead if you are not sure your data-set + will always remain very small. Iteration produces elements in the order they were added. + However, element order is not guaranteed to be maintained by the various Set + mathematical operators. + + + + + Creates a new set instance based on a list. + + + + + Creates a new set instance based on a list and + initializes it based on a collection of elements. + + A collection of elements that defines the initial set contents. + + + + Implements a set based on a sorted tree. This gives good performance for operations on very + large data-sets, though not as good - asymptotically - as a . + However, iteration occurs in order. Elements that you put into this type of collection must + implement , and they must actually be comparable. You can't mix + and values, for example. + + + + + Creates a new set instance based on a sorted tree. + + + + + Creates a new set instance based on a sorted tree. + + The to use for sorting. + + + + Creates a new set instance based on a sorted tree and + initializes it based on a collection of elements. + + A collection of elements that defines the initial set contents. + + + + Creates a new set instance based on a sorted tree and + initializes it based on a collection of elements. + + A collection of elements that defines the initial set contents. + The to use for sorting. + + + + Implements a thread-safe wrapper. + + + The implementation is extremely conservative, serializing critical sections + to prevent possible deadlocks, and locking on everything. The one exception + is for enumeration, which is inherently not thread-safe. For this, you have + to the object for the duration + of the enumeration. + + + + + Constructs a thread-safe wrapper. + + The object that this object will wrap. + + + + Adds the specified element to this set if it is not already present. + + The object to add to the set. + is the object was added, if it was already present. + + + + Adds all the elements in the specified collection to the set if they are not already present. + + A collection of objects to add to the set. + is the set changed as a result of this operation, if not. + + + + Removes all objects from the set. + + + + + Returns if this set contains the specified element. + + The element to look for. + if this set contains the specified element, otherwise. + + + + Returns if the set contains all the elements in the specified collection. + + A collection of objects. + if the set contains all the elements in the specified collection, otherwise. + + + + Removes the specified element from the set. + + The element to be removed. + if the set contained the specified element, otherwise. + + + + Remove all the specified elements from this set, if they exist in this set. + + A collection of elements to remove. + if the set was modified as a result of this operation. + + + + Retains only the elements in this set that are contained in the specified collection. + + Collection that defines the set of elements to be retained. + if this set changed as a result of this operation. + + + + Copies the elements in the set to an array. The type of array needs + to be compatible with the objects in the set, obviously. + + An array that will be the target of the copy operation. + The zero-based index where copying will start. + + + + Returns an enumerator that iterates through the set. + + + An object that can be used to iterate through the set. + + + Enumeration is, by definition, not thread-safe. Use a on the + to synchronize the entire enumeration process. + + + + + Returns a clone of this instance. + + A clone of this object. + + + + Returns if this set contains no elements. + + + + + The number of elements contained in this collection. + + + + + Returns , indicating that this object is thread-safe. The exception to this + is enumeration, which is inherently not thread-safe. Use the object to + lock this object for the entire duration of the enumeration. + + + + + Returns an object that can be used to synchronize the set between threads. + + +
+
diff --git a/tools/NHibernate/Lucene.Net.dll b/tools/NHibernate/Lucene.Net.dll new file mode 100644 index 000000000..c4bac2350 Binary files /dev/null and b/tools/NHibernate/Lucene.Net.dll differ diff --git a/tools/NHibernate/Lucene.Net.xml b/tools/NHibernate/Lucene.Net.xml new file mode 100644 index 000000000..f835fd20d --- /dev/null +++ b/tools/NHibernate/Lucene.Net.xml @@ -0,0 +1,6740 @@ + + + + Lucene.Net + + + + A memory-resident {@link IndexOutput} implementation. + + + $Id: RAMOutputStream.java 150537 2004-09-28 20:45:26Z cutting $ + + + + Base implementation class for buffered {@link IndexOutput}. + + + Abstract base class for output to a file in a Directory. A random-access + output stream. Used for all Lucene index output operations. + + + + + + + + Writes a single byte. + + + + + Writes an array of bytes. + the bytes to write + + the number of bytes to write + + + + + + Writes an int as four bytes. + + + + + Writes an int in a variable-length format. Writes between one and + five bytes. Smaller values take fewer bytes. Negative numbers are not + supported. + + + + + + Writes a long as eight bytes. + + + + + Writes an long in a variable-length format. Writes between one and five + bytes. Smaller values take fewer bytes. Negative numbers are not + supported. + + + + + + Writes a string. + + + + + Writes a sequence of UTF-8 encoded characters from a string. + the source of the characters + + the first character in the sequence + + the number of characters in the sequence + + + + + + Forces any buffered output to be written. + + + Closes this stream to further operations. + + + Returns the current position in this file, where the next write will + occur. + + + + + + Sets current position in this file, where the next write will occur. + + + + + The number of bytes in the file. + + + Writes a single byte. + + + + + Writes an array of bytes. + the bytes to write + + the number of bytes to write + + + + + + Forces any buffered output to be written. + + + Expert: implements buffer write. Writes bytes at the current position in + the output. + + the bytes to write + + the number of bytes to write + + + + Closes this stream to further operations. + + + Returns the current position in this file, where the next write will + occur. + + + + + + Sets current position in this file, where the next write will occur. + + + + + The number of bytes in the file. + + + Construct an empty output buffer. + + + Copy the current contents of this buffer to the named output. + + + Resets this to an empty buffer. + + + + Attempts to obtain exclusive access and immediately return + upon success or failure. + + true iff exclusive access is obtained + + + + Attempts to obtain an exclusive lock within amount + of time given. Currently polls once per second until + lockWaitTimeout is passed. + + length of time to wait in ms + + true if lock was obtained + + IOException if lock wait times out or obtain() throws an IOException + + + Releases exclusive access. + + + Returns true if the resource is currently locked. Note that one must + still call {@link #Obtain()} before using the resource. + + + + Utility class for executing code with exclusive access. + + + Constructs an executor that will grab the named lock. + + + Code to execute with exclusive access. + + + Calls {@link #doBody} while lock is obtained. Blocks if lock + cannot be obtained immediately. Retries to obtain lock once per second + until it is obtained, or until it has tried ten times. Lock is released when + {@link #doBody} exits. + + + + Implements the wildcard search query. Supported wildcards are *, which + matches any character sequence (including the empty one), and ?, + which matches any single character. Note this query can be slow, as it + needs to iterate over many terms. In order to prevent extremely slow WildcardQueries, + a Wildcard term should not start with one of the wildcards * or + ?. + + + + + + + + + Sets the boost for this query clause to b. Documents + matching this clause will (in addition to the normal weightings) have + their score multiplied by b. + + + + Gets the boost for this clause. Documents matching + this clause will (in addition to the normal weightings) have their score + multiplied by b. The boost is 1.0 by default. + + + + + Prints a query to a string. + + + + Expert: Constructs and initializes a Weight for a top-level query. + + + Expert: called to re-write queries into primitive queries. For example, + a PrefixQuery will be rewritten into a BooleanQuery that consists + of TermQuerys. + + + + Expert: called when re-writing queries under MultiSearcher. + + Create a single query suitable for use by all subsearchers (in 1-1 + correspondence with queries). This is an optimization of the OR of + all queries. We handle the common optimization cases of equal + queries and overlapping clauses of boolean OR queries (as generated + by MultiTermQuery.rewrite() and RangeQuery.rewrite()). + Be careful overriding this method as queries[0] determines which + method will be called and is not necessarily of the same type as + the other queries. + + + + Expert: adds all terms occuring in this query to the terms set. Only + works if this query is in its {@link #rewrite rewritten} form. + + + UnsupportedOperationException if this query is not yet rewritten + + + + Expert: Returns the Similarity implementation to be used for this query. + Subclasses may override this method to specify their own Similarity + implementation, perhaps one that delegates through that of the Searcher. + By default the Searcher's Similarity implementation is returned. + + + + Returns a clone of this query. + + + Constructs a query for terms matching term. + + + Returns the pattern term. + + + Construct the enumeration to be used, expanding the pattern term. + + + Prints a user-readable version of this query. + + + + + + Construct to collect a given number of hits. + the maximum number of hits to collect + + + + The total number of documents that matched this query. + + + The top-scoring hits. + + + Base class for span-based queries. + + + Expert: Returns the matches for this query in an index. Used internally + to search for spans. + + + + Returns the name of the field matched by this query. + + + Returns a collection of all terms matched by this query. + use extractTerms instead + + + + + + Abstract base class providing a mechanism to restrict searches to a subset + of an index. + + + + Returns a BitSet with true for documents which should be permitted in + search results, and false for those that should not. + + + + + Sets this to the data for a term. + The enumeration is reset to the start of the data for this term. + + + + Sets this to the data for the current term in a {@link TermEnum}. + This may be optimized in some implementations. + + + + + + + + + Frees associated resources. + + + Optimized implementation. + + + Overridden by SegmentTermPositions to skip in prox stream. + + + Optimized implementation. + + + + + Called by super.skipTo(). + + + + + Returns the next token in the stream, or null at EOS. + + + Releases resources associated with this stream. + + + The text source for this Tokenizer. + + + Construct a tokenizer with null input. + + + Construct a token stream processing the given input. + + + By default, closes the input Reader. + + + Lexical error occured. + + + An attempt wass made to create a second instance of a static token manager. + + + Tried to change to an invalid lexical state. + + + Detected (and bailed out of) an infinite loop in the token manager. + + + Indicates the reason why the exception is thrown. It will have + one of the above 4 values. + + + + Replaces unprintable characters by their espaced (or unicode escaped) + equivalents in the given string + + + + Returns a detailed message for the Error when it is thrown by the + token manager to indicate a lexical error. + Parameters : + EOFSeen : indicates if EOF caused the lexicl error + curLexState : lexical state in which this error occured + errorLine : line number when the error occured + errorColumn : column number when the error occured + errorAfter : prefix that was seen before this error occured + curchar : the offending character + Note: You can customize the lexical error message by modifying this method. + + + + You can also modify the body of this method to customize your error messages. + For example, cases like LOOP_DETECTED and INVALID_LEXICAL_STATE are not + of end-users concern, so you can return something like : + + "Internal Error : Please file a bug report .... " + + from this method for such cases in the release version of your parser. + + + + + + Constructs a Scorer. + The Similarity implementation used by this scorer. + + + + Returns the Similarity implementation used by this scorer. + + + + Expert: Collects matching documents in a range. Hook for optimization. + Note that {@link #Next()} must be called once before this method is called + for the first time. + + The collector to which all matching documents are passed through + {@link HitCollector#Collect(int, float)}. + + Do not score documents past this. + + true if more matching documents may remain. + + + + + Returns the current document number matching the query. + Initially invalid, until {@link #Next()} is called the first time. + + + + Returns the score of the current document matching the query. + Initially invalid, until {@link #Next()} or {@link #SkipTo(int)} + is called the first time. + + + + + + The scorers passed from the constructor. + These are set to null as soon as their next() or skipTo() returns false. + + + + Construct a ReqOptScorer. + The required scorer. This must match. + + The optional scorer. This is used for scoring only. + + + + Returns the score of the current document matching the query. + Initially invalid, until {@link #Next()} is called the first time. + + The score of the required scorer, eventually increased by the score + of the optional scorer when it also matches the current document. + + + + Explain the score of a document. + Also show the total score. + See BooleanScorer.explain() on how to do this. + + + + A query that matches all documents. + + + John Wang + + + + + The query that this concerns. + + + The weight for this query. + + + The sum of squared weights of contained query clauses. + + + Assigns the query normalization factor to this. + + + Constructs a scorer for this. + + + An explanation of the score computation for the named document. + + + + A PriorityQueue maintains a partial ordering of its elements such that the + least element can always be found in constant time. Put()'s and pop()'s + require log(size) time. + + + + Determines the ordering of objects in this priority queue. Subclasses + must define this one method. + + + + Subclass constructors must call this. + + + Adds an Object to a PriorityQueue in log(size) time. + If one tries to add more objects than maxSize from initialize + a RuntimeException (ArrayIndexOutOfBound) is thrown. + + + + Adds element to the PriorityQueue in log(size) time if either + the PriorityQueue is not full, or not lessThan(element, top()). + + + + true if element is added, false otherwise. + + + + Returns the least element of the PriorityQueue in constant time. + + + Removes and returns the least element of the PriorityQueue in log(size) + time. + + + + Should be called when the Object at top changes values. Still log(n) + worst case, but it's at least twice as fast to
+            { pq.top().change(); pq.adjustTop(); }
+            
instead of
+            { o = pq.pop(); o.change(); pq.push(o); }
+            
+
+
+ + Returns the number of elements currently stored in the PriorityQueue. + + + Removes all entries from the PriorityQueue. + + + Creates a hit queue sorted by the given list of fields. + Index to use. + + Field names, in priority order (highest priority first). Cannot be null or empty. + + The number of hits to retain. Must be greater than zero. + + IOException + + + Stores a comparator corresponding to each field being sorted by + + + Stores the sort criteria being used. + + + Stores the maximum score value encountered, needed for normalizing. + + + returns the maximum score encountered by elements inserted via insert() + + + Returns whether a is less relevant than b. + ScoreDoc + + ScoreDoc + + true if document a should be sorted after document b. + + + + Given a FieldDoc object, stores the values used + to sort the given document. These values are not the raw + values out of the index, but the internal representation + of them. This is so the given search hit can be collated + by a MultiSearcher with other search hits. + + The FieldDoc to store sort values into. + + The same FieldDoc passed in. + + + + + + Returns the SortFields being used by this hit queue. + + + Internal cache of comparators. Similar to FieldCache, only + caches comparators instead of term values. + + + + Returns a comparator if it is in the cache. + + + Stores a comparator into the cache. + + + Returns a comparator for sorting hits according to a field containing integers. + Index to use. + + Field containg integer values. + + Comparator for sorting hits. + + IOException If an error occurs reading the index. + + + Returns a comparator for sorting hits according to a field containing floats. + Index to use. + + Field containg float values. + + Comparator for sorting hits. + + IOException If an error occurs reading the index. + + + Returns a comparator for sorting hits according to a field containing strings. + Index to use. + + Field containg string values. + + Comparator for sorting hits. + + IOException If an error occurs reading the index. + + + Returns a comparator for sorting hits according to a field containing strings. + Index to use. + + Field containg string values. + + Comparator for sorting hits. + + IOException If an error occurs reading the index. + + + Returns a comparator for sorting hits according to values in the given field. + The terms in the field are looked at to determine whether they contain integers, + floats or strings. Once the type is determined, one of the other static methods + in this class is called to get the comparator. + + Index to use. + + Field containg values. + + Comparator for sorting hits. + + IOException If an error occurs reading the index. + + + + Returns the value used to sort the given document. The + object returned must implement the java.io.Serializable + interface. This is used by multisearchers to determine how to collate results from their searchers. + + + + Document + + Serializable object + + + + Returns the type of sort. Should return SortField.SCORE, SortField.DOC, SortField.STRING, SortField.INTEGER, + SortField.FLOAT or SortField.CUSTOM. It is not valid to return SortField.AUTO. + This is used by multisearchers to determine how to collate results from their searchers. + + One of the constants in SortField. + + + + + + A Scorer for OR like queries, counterpart of Lucene's ConjunctionScorer. + This Scorer implements {@link Scorer#SkipTo(int)} and uses skipTo() on the given Scorers. + + + + The number of subscorers. + + + The subscorers. + + + The minimum number of scorers that should match. + + + + The document number of the current match. + + + The number of subscorers that provide the current match. + + + + Construct a DisjunctionScorer, using one as the minimum number + of matching subscorers. + + + + Called the first time next() or skipTo() is called to + initialize scorerQueue. + + + + + Returns the score of the current document matching the query. + Initially invalid, until {@link #Next()} is called the first time. + + + + Returns the number of subscorers matching the current document. + Initially invalid, until {@link #Next()} is called the first time. + + + + + Gives and explanation for the score of a given document. + Show the resulting score. See BooleanScorer.explain() on how to do this. + + + A PriorityQueue that orders by {@link Scorer#Doc()}. + + + The Scorer for DisjunctionMaxQuery's. The union of all documents generated by the the subquery scorers + is generated in document number order. The score for each document is the maximum of the scores computed + by the subquery scorers that generate that document, plus tieBreakerMultiplier times the sum of the scores + for the other subqueries that generate the document. + + Chuck Williams + + + + Creates a new instance of DisjunctionMaxScorer + Multiplier applied to non-maximum-scoring subqueries for a document as they are summed into the result. + + -- not used since our definition involves neither coord nor terms directly + + + + Add the scorer for a subquery + the scorer of a subquery of our associated DisjunctionMaxQuery + + + + Generate the next document matching our associated DisjunctionMaxQuery. + true iff there is a next document + + + + Determine the current document number. Initially invalid, until {@link #Next()} is called the first time. + the document number of the currently generated document + + + + Determine the current document score. Initially invalid, until {@link #Next()} is called the first time. + the score of the current generated document + + + + Advance to the first document beyond the current whose number is greater than or equal to target. + the minimum number of the next desired document + + true iff there is a document to be generated whose number is at least target + + + + Explain a score that we computed. UNSUPPORTED -- see explanation capability in DisjunctionMaxQuery. + the number of a document we scored + + the Explanation for our score + + + + Wraps another filter's result and caches it. The caching + behavior is like {@link QueryFilter}. The purpose is to allow + filters to simply filter, and then wrap with this class to add + caching, keeping the two concerns decoupled yet composable. + + + + What about serialization in RemoteSearchable? Caching won't work. + Should transient be removed? + + + + Filter to cache results of + + + + + Increments the enumeration to the next element. True if one exists. + + + Returns the current Term in the enumeration. + + + Returns the docFreq of the current Term in the enumeration. + + + Closes the enumeration to further activity, freeing resources. + + + + This ctor used by test code only. + + + The directory to write the document information to + + The analyzer to use for the document + + The Similarity function + + The maximum number of tokens a field may have + + + + If non-null, a message will be printed to this if maxFieldLength is reached. + + + A field is a section of a Document. Each field has two parts, a name and a + value. Values may be free text, provided as a String or as a Reader, or they + may be atomic keywords, which are not further processed. Such keywords may + be used to represent dates, urls, etc. Fields are optionally stored in the + index, so that they may be returned with hits on the document. + + + + + + Returns the name of the field as an interned string. + For example "date", "title", "body", ... + + + + The value of the field as a String, or null. If null, the Reader value + or binary value is used. Exactly one of stringValue(), readerValue(), and + binaryValue() must be set. + + + + The value of the field as a Reader, or null. If null, the String value + or binary value is used. Exactly one of stringValue(), readerValue(), + and binaryValue() must be set. + + + + The value of the field in Binary, or null. If null, the Reader or + String value is used. Exactly one of stringValue(), readerValue() and + binaryValue() must be set. + + + + Create a field by specifying its name, value and how it will + be saved in the index. Term vectors will not be stored in the index. + + + The name of the field + + The string to process + + Whether value should be stored in the index + + Whether the field should be indexed, and if so, if it should + be tokenized before indexing + + NullPointerException if name or value is null + IllegalArgumentException if the field is neither stored nor indexed + + + Create a field by specifying its name, value and how it will + be saved in the index. + + + The name of the field + + The string to process + + Whether value should be stored in the index + + Whether the field should be indexed, and if so, if it should + be tokenized before indexing + + Whether term vector should be stored + + NullPointerException if name or value is null + IllegalArgumentException in any of the following situations: +
    +
  • the field is neither stored nor indexed
  • +
  • the field is not indexed but termVector is TermVector.YES
  • +
+
+
+ + Create a tokenized and indexed field that is not stored. Term vectors will + not be stored. + + + The name of the field + + The reader with the content + + NullPointerException if name or reader is null + + + Create a tokenized and indexed field that is not stored, optionally with + storing term vectors. + + + The name of the field + + The reader with the content + + Whether term vector should be stored + + NullPointerException if name or reader is null + + + Create a stored field with binary value. Optionally the value may be compressed. + + + The name of the field + + The binary value + + How value should be stored (compressed or not.) + + IllegalArgumentException if store is Store.NO + + + True iff the value of the field is to be stored in the index for return + with search hits. It is an error for this to be true if a field is + Reader-valued. + + + + True iff the value of the field is to be indexed, so that it may be + searched on. + + + + True iff the value of the field should be tokenized as text prior to + indexing. Un-tokenized fields are indexed as a single word and may not be + Reader-valued. + + + + True if the value of the field is stored and compressed within the index + + + True iff the term or terms used to index this field are stored as a term + vector, available from {@link IndexReader#GetTermFreqVector(int,String)}. + These methods do not provide access to the original content of the field, + only to terms used to index it. If the original content must be + preserved, use the stored attribute instead. + + + + + + + True iff terms are stored as term vector together with their offsets + (start and end positon in source text). + + + + True iff terms are stored as term vector together with their token positions. + + + True iff the value of the filed is stored as binary + + + True if norms are omitted for this indexed field + + + Expert: + + If set, omit normalization factors associated with this indexed field. + This effectively disables indexing boosts and length normalization for this field. + + + + Prints a Field for human consumption. + + + Specifies whether and how a field should be stored. + + + A serializable Enum class. + + + Resolves the deserialized instance to the local reference for accurate + equals() and == comparisons. + + + a reference to Parameter as resolved in the local VM + + ObjectStreamException + + + Store the original field value in the index in a compressed form. This is + useful for long documents and for binary valued fields. + + + + Store the original field value in the index. This is useful for short texts + like a document's title which should be displayed with the results. The + value is stored in its original form, i.e. no analyzer is used before it is + stored. + + + + Do not store the field value in the index. + + + Specifies whether and how a field should be indexed. + + + Do not index the field value. This field can thus not be searched, + but one can still access its contents provided it is + {@link Field.Store stored}. + + + + Index the field's value so it can be searched. An Analyzer will be used + to tokenize and possibly further normalize the text before its + terms will be stored in the index. This is useful for common text. + + + + Index the field's value without using an Analyzer, so it can be searched. + As no analyzer is used the value will be stored as a single term. This is + useful for unique Ids like product numbers. + + + + Index the field's value without an Analyzer, and disable + the storing of norms. No norms means that index-time boosting + and field length normalization will be disabled. The benefit is + less memory usage as norms take up one byte per indexed field + for every document in the index. + + + + Specifies whether and how a field should have term vectors. + + + Do not store term vectors. + + + Store the term vectors of each document. A term vector is a list + of the document's terms and their number of occurences in that document. + + + + Store the term vector + token position information + + + + + + + Store the term vector + Token offset information + + + + + + + Store the term vector + Token position and offset information + + + + + + + + + + + + This interface describes a character stream that maintains line and + column number positions of the characters. It also has the capability + to backup the stream to some extent. An implementation of this + interface is used in the TokenManager implementation generated by + JavaCCParser. + + All the methods except backup can be implemented in any fashion. backup + needs to be implemented correctly for the correct operation of the lexer. + Rest of the methods are all used to get information like line number, + column number and the String that constitutes a token and are not used + by the lexer. Hence their implementation won't affect the generated lexer's + operation. + + + + Returns the next character from the selected input. The method + of selecting the input is the responsibility of the class + implementing this interface. Can throw any java.io.IOException. + + + + Returns the column number of the last character for current token (being + matched after the last call to BeginTOken). + + + + Returns the line number of the last character for current token (being + matched after the last call to BeginTOken). + + + + Returns the column number of the first character for current token (being + matched after the last call to BeginTOken). + + + + Returns the line number of the first character for current token (being + matched after the last call to BeginTOken). + + + + Backs up the input stream by amount steps. Lexer calls this method if it + had already read some characters, but could not use them to match a + (longer) token. So, they will be used again as the prefix of the next + token and it is the implemetation's responsibility to do this right. + + + + Returns the next character that marks the beginning of the next token. + All characters must remain in the buffer between two successive calls + to this method to implement backup correctly. + + + + Returns a string made up of characters from the marked token beginning + to the current buffer position. Implementations have the choice of returning + anything that they want to. For example, for efficiency, one might decide + to just return null, which is a valid implementation. + + + + Returns an array of characters that make up the suffix of length 'len' for + the currently matched token. This is used to build up the matched string + for use in actions in the case of MORE. A simple and inefficient + implementation of this is as follows : + + { + String t = GetImage(); + return t.substring(t.length() - len, t.length()).toCharArray(); + } + + + + The lexer calls this function to indicate that it is done with the stream + and hence implementations can free any resources held by this class. + Again, the body of this function can be just empty and it will not + affect the lexer's operation. + + + + Constructs from a Reader. + + + An abstract base class for simple, character-oriented tokenizers. + + + Returns true iff a character should be included in a token. This + tokenizer generates as tokens adjacent sequences of characters which + satisfy this predicate. Characters for which this is false are used to + define token boundaries and are not included in tokens. + + + + Called on each token character to normalize it before it is added to the + token. The default implementation does nothing. Subclasses may use this + to, e.g., lowercase tokens. + + + + Returns the next token in the stream, or null at EOS. + + + + Creates a TokenStream which tokenizes all the text in the provided + Reader. Default implementation forwards to tokenStream(Reader) for + compatibility with older version. Override to allow Analyzer to choose + strategy based on document and/or field. Must be able to handle null + field name for backward compatibility. + + + + Invoked before indexing a Field instance if + terms have already been added to that field. This allows custom + analyzers to place an automatic position increment gap between + Field instances using the same field name. The default value + position increment gap is 0. With a 0 position increment gap and + the typical default token position increment of 1, all terms in a field, + including across Field instances, are in successive positions, allowing + exact PhraseQuery matches, for instance, across Field instance boundaries. + + + Field name being indexed. + + position increment gap, added to the next token emitted from {@link #TokenStream(String,Reader)} + + + + A Filter that restricts search results to a range of values in a given + field. + +

+ This code borrows heavily from {@link RangeQuery}, but is implemented as a Filter + +

+
+
+ + The field this range applies to + + The lower bound on this range + + The upper bound on this range + + Does this range include the lower bound? + + Does this range include the upper bound? + + IllegalArgumentException if both terms are null or if + lowerTerm is null and includeLower is true (similar for upperTerm + and includeUpper) + + + + Constructs a filter for field fieldName matching + less than or equal to upperTerm. + + + + Constructs a filter for field fieldName matching + greater than or equal to lowerTerm. + + + + Returns a BitSet with true for documents which should be + permitted in search results, and false for those that should + not. + + + + Returns true if o is equal to this. + + + Returns a hash code value for this object. + + + + + + + Frees resources associated with this Searcher. + Be careful not to call this method while you are still using objects + like {@link Hits}. + + + + Expert: Returns the number of documents containing term. + Called by search code to compute term weights. + + + + + + Expert: For each term in the terms array, calculates the number of + documents containing term. Returns an array with these + document frequencies. Used to minimize number of remote calls. + + + + Expert: Returns one greater than the largest possible document number. + Called by search code to compute term weights. + + + + + + + Expert: Returns the stored fields of document i. + Called by {@link HitCollector} implementations. + + + + + + Expert: called to re-write queries into primitive queries. + BooleanQuery.TooManyClauses + + + + + Returns the documents matching query. + BooleanQuery.TooManyClauses + + + Returns the documents matching query and + filter. + + BooleanQuery.TooManyClauses + + + Returns documents matching query sorted by + sort. + + BooleanQuery.TooManyClauses + + + Returns documents matching query and filter, + sorted by sort. + + BooleanQuery.TooManyClauses + + + + + + + + The Similarity implementation used by this searcher. + + + Expert: Set the Similarity implementation used by this Searcher. + + + + + + + + creates a weight for query + new weight + + + + Creates a searcher searching the index in the named directory. + + + Creates a searcher searching the index in the provided directory. + + + Creates a searcher searching the provided index. + + + Return the {@link IndexReader} this searches. + + + Note that the underlying IndexReader is not closed, if + IndexSearcher was constructed with IndexSearcher(IndexReader r). + If the IndexReader was supplied implicitly by specifying a directory, then + the IndexReader gets closed. + + + + + Creates a hit queue sorted by the given list of fields. + Field names, in priority order (highest priority first). + + The number of hits to retain. Must be greater than zero. + + + + Allows redefinition of sort fields if they are null. + This is to handle the case using ParallelMultiSearcher where the + original list contains AUTO and we don't know the actual sort + type until the values come back. The fields can only be set once. + This method is thread safe. + + + + + + Returns the fields being used to sort. + + + Returns an array of collators, possibly null. The collators + correspond to any SortFields which were given a specific locale. + + Array of sort fields. + + Array, possibly null. + + + + Returns whether a is less relevant than b. + ScoreDoc + + ScoreDoc + + true if document a should be sorted after document b. + + + + + Expert: Returned by low-level search implementations. + + + + + Expert: The score of this document for the query. + + + Expert: A hit document's number. + + + + + Expert: Constructs a ScoreDoc. + + + Expert: The values which are used to sort the referenced document. + The order of these will match the original sort criteria given by a + Sort object. Each Object will be either an Integer, Float or String, + depending on the type of values in the terms of the original field. + + + + + + + + Expert: Creates one of these objects with empty sort information. + + + Expert: Creates one of these objects with the given sort information. + + + A Query that matches documents matching boolean combinations of other + queries, e.g. {@link TermQuery}s, {@link PhraseQuery}s or other + BooleanQuerys. + + + + Return the maximum number of clauses permitted, 1024 by default. + Attempts to add more than the permitted number of clauses cause {@link + TooManyClauses} to be thrown. + + + + + + + Constructs an empty boolean query. + + + Constructs an empty boolean query. + + {@link Similarity#Coord(int,int)} may be disabled in scoring, as + appropriate. For example, this score factor does not make sense for most + automatically generated queries, like {@link WildcardQuery} and {@link + FuzzyQuery}. + + + disables {@link Similarity#Coord(int,int)} in scoring. + + + + Returns true iff {@link Similarity#Coord(int,int)} is disabled in + scoring for this query instance. + + + + + + Specifies a minimum number of the optional BooleanClauses + which must be satisifed. + +

+ By default no optional clauses are neccessary for a match + (unless there are no required clauses). If this method is used, + then the specified numebr of clauses is required. +

+

+ Use of this method is totally independant of specifying that + any specific clauses are required (or prohibited). This number will + only be compared against the number of matching optional clauses. +

+

+ EXPERT NOTE: Using this method will force the use of BooleanWeight2, + regardless of wether setUseScorer14(true) has been called. +

+ +
+ the number of optional clauses that must match + + + +
+ + Gets the minimum number of the optional BooleanClauses + which must be satisifed. + + + + Adds a clause to a boolean query. + + + TooManyClauses if the new number of clauses exceeds the maximum clause number + + + + + Adds a clause to a boolean query. + TooManyClauses if the new number of clauses exceeds the maximum clause number + + + + + Returns the set of clauses in this query. + + + Indicates whether to use good old 1.4 BooleanScorer. + + + Prints a user-readable version of this query. + + + Returns true iff o is equal to this. + + + Returns a hash code value for this object. + + + Expert: Delegating scoring implementation. Useful in {@link + Query#GetSimilarity(Searcher)} implementations, to override only certain + methods of a Searcher's Similiarty implementation.. + + + + + The Similarity implementation used by default. + + + Set the default Similarity implementation used by indexing and search + code. + + + + + + + + + + Cache of decoded bytes. + + + Decodes a normalization factor stored in an index. + + + + + Returns a table for decoding normalization bytes. + + + + + + + + + + + + + + + Construct a {@link Similarity} that delegates all methods to another. + + + the Similarity implementation to delegate to + + + + Thrown when an attempt is made to add more than {@link + #GetMaxClauseCount()} clauses. This typically happens if + a PrefixQuery, FuzzyQuery, WildcardQuery, or RangeQuery + is expanded to many terms during search. + + + + A good old 1.4 Scorer + + + + An alternative Scorer that uses and provides skipTo(), + and scores documents in document number order. + + + + A clause in a BooleanQuery. + + + The query whose matching documents are combined by the boolean query. + + + Constructs a BooleanClause. + + + Returns true iff o is equal to this. + + + Returns a hash code value for this object. + + + Specifies how terms may occur in matching documents. + + + Use this operator for terms that must appear in the matching documents. + + + Use this operator for terms that should appear in the + matching documents. For a BooleanQuery with two SHOULD + subqueries, at least one of the queries must appear in the matching documents. + + + + Use this operator for terms that must not appear in the matching documents. + Note that it is not possible to search for queries that only consist + of a MUST_NOT query. + + + + $Id: SegmentReader.java 329523 2005-10-30 05:37:11Z yonik $ + + + + + Constructor used if IndexReader is not owner of its directory. + This is used for IndexReaders that are used within other IndexReaders that take care or locking directories. + + + Directory where IndexReader files reside. + + + + Constructor used if IndexReader is owner of its directory. + If IndexReader is owner of its directory, it locks its directory in case of write operations. + + + Directory where IndexReader files reside. + + Used for write-l + + + + + + Returns an IndexReader reading the index in an FSDirectory in the named + path. + + + + Returns an IndexReader reading the index in an FSDirectory in the named + path. + + + + Returns an IndexReader reading the index in the given Directory. + + + Returns the directory this index resides in. + + + Returns the time the index in the named directory was last modified. + Do not use this to check whether the reader is still up-to-date, use + {@link #IsCurrent()} instead. + + + + Returns the time the index in the named directory was last modified. + Do not use this to check whether the reader is still up-to-date, use + {@link #IsCurrent()} instead. + + + + Returns the time the index in the named directory was last modified. + Do not use this to check whether the reader is still up-to-date, use + {@link #IsCurrent()} instead. + + + + Reads version number from segments files. The version number is + initialized with a timestamp and then increased by one for each change of + the index. + + + where the index resides. + + version number. + + IOException if segments file cannot be read + + + Reads version number from segments files. The version number is + initialized with a timestamp and then increased by one for each change of + the index. + + + where the index resides. + + version number. + + IOException if segments file cannot be read + + + Reads version number from segments files. The version number is + initialized with a timestamp and then increased by one for each change of + the index. + + + where the index resides. + + version number. + + IOException if segments file cannot be read. + + + Version number when this IndexReader was opened. + + + Check whether this IndexReader still works on a current version of the index. + If this is not the case you will need to re-open the IndexReader to + make sure you see the latest changes made to the index. + + + IOException + + + Return an array of term frequency vectors for the specified document. + The array contains a vector for each vectorized field in the document. + Each vector contains terms and frequencies for all terms in a given vectorized field. + If no such fields existed, the method returns null. The term vectors that are + returned my either be of type TermFreqVector or of type TermPositionsVector if + positions or offsets have been stored. + + + document for which term frequency vectors are returned + + array of term frequency vectors. May be null if no term vectors have been + stored for the specified document. + + IOException if index cannot be accessed + + + + + Return a term frequency vector for the specified document and field. The + returned vector contains terms and frequencies for the terms in + the specified field of this document, if the field had the storeTermVector + flag set. If termvectors had been stored with positions or offsets, a + TermPositionsVector is returned. + + + document for which the term frequency vector is returned + + field for which the term frequency vector is returned. + + term frequency vector May be null if field does not exist in the specified + document or term vector was not stored. + + IOException if index cannot be accessed + + + + + Returns true if an index exists at the specified directory. + If the directory does not exist or if there is no index in it. + false is returned. + + the directory to check for an index + + true if an index exists; false otherwise + + + + Returns true if an index exists at the specified directory. + If the directory does not exist or if there is no index in it. + + the directory to check for an index + + true if an index exists; false otherwise + + + + Returns true if an index exists at the specified directory. + If the directory does not exist or if there is no index in it. + + the directory to check for an index + + true if an index exists; false otherwise + + IOException if there is a problem with accessing the index + + + Returns the number of documents in this index. + + + Returns one greater than the largest possible document number. + This may be used to, e.g., determine how big to allocate an array which + will have an element for every document number in an index. + + + + Returns the stored fields of the nth + Document in this index. + + + + Returns true if document n has been deleted + + + Returns true if any documents have been deleted + + + Returns true if there are norms stored for this field. + + + Returns the byte-encoded normalization factor for the named field of + every document. This is used by the search code to score documents. + + + + + + + Reads the byte-encoded normalization factor for the named field of every + document. This is used by the search code to score documents. + + + + + + + Expert: Resets the normalization factor for the named field of the named + document. The norm represents the product of the field's {@link + Field#SetBoost(float) boost} and its {@link Similarity#LengthNorm(String, + int) length normalization}. Thus, to preserve the length normalization + values when resetting this, one should base the new value upon the old. + + + + + + + + + Implements setNorm in subclass. + + + Expert: Resets the normalization factor for the named field of the named + document. + + + + + + + + + Returns an enumeration of all the terms in the index. + The enumeration is ordered by Term.compareTo(). Each term + is greater than all that precede it in the enumeration. + + + + Returns an enumeration of all terms after a given term. + The enumeration is ordered by Term.compareTo(). Each term + is greater than all that precede it in the enumeration. + + + + Returns the number of documents containing the term t. + + + + Returns an unpositioned {@link TermDocs} enumerator. + + + + Returns an unpositioned {@link TermPositions} enumerator. + + + Tries to acquire the WriteLock on this directory. + this method is only valid if this IndexReader is directory owner. + + + IOException If WriteLock cannot be acquired. + + + Deletes the document numbered docNum. Once a document is + deleted it will not appear in TermDocs or TermPostitions enumerations. + Attempts to read its field with the {@link #document} + method will result in an error. The presence of this document may still be + reflected in the {@link #docFreq} statistic, though + this will be corrected eventually as the index is further modified. + + + + Implements deletion of the document numbered docNum. + Applications should call {@link #DeleteDocument(int)} or {@link #DeleteDocuments(Term)}. + + + + Deletes all documents containing term. + This is useful if one uses a document field to hold a unique ID string for + the document. Then to delete such a document, one merely constructs a + term with the appropriate field and the unique ID string as its text and + passes it to this method. + See {@link #Delete(int)} for information about when this deletion will + become effective. + + the number of documents deleted + + + + Undeletes all documents currently marked as deleted in this index. + + + Implements actual undeleteAll() in subclass. + + + Commit changes resulting from delete, undeleteAll, or setNorm operations + + + IOException + + + Implements commit. + + + Closes files associated with this index. + Also saves any new deletions to disk. + No other methods should be called after this has been called. + + + + Implements close. + + + Release the write lock, if needed. + + + Get a list of unique field names that exist in this index and have the specified + field option information. + + specifies which field option should be available for the returned fields + + Collection of Strings indicating the names of the fields. + + + + + + Returns true iff the index in the named directory is + currently locked. + + the directory to check for a lock + + IOException if there is a problem with accessing the index + + + Returns true iff the index in the named directory is + currently locked. + + the directory to check for a lock + + IOException if there is a problem with accessing the index + + + + Prints the filename and size of each file within a given compound file. + Add the -extract flag to extract files to the current working directory. + In order to make the extracted version of the index work, you have to copy + the segments file from the compound index into the directory where the extracted files are stored. + + Usage: Lucene.Net.index.IndexReader [-extract] <cfsfile> + + + + The class which implements SegmentReader. + + + + + + + Read norms into a pre-allocated array. + + + Create a clone from the initial TermVectorsReader and store it in the ThreadLocal. + TermVectorsReader + + + + Return a term frequency vector for the specified document and field. The + vector returned contains term numbers and frequencies for all terms in + the specified field of this document, if the field had storeTermVector + flag set. If the flag was not set, the method returns null. + + IOException + + + Return an array of term frequency vectors for the specified document. + The array contains a vector for each vectorized field in the document. + Each vector vector contains term numbers and frequencies for all terms + in a given vectorized field. + If no such fields existed, the method returns null. + + IOException + + + Removes words that are too long and too short from the stream. + + + David Spencer + + $Id: LengthFilter.java 347992 2005-11-21 21:41:43Z dnaber $ + + + + + The source of tokens for this filter. + + + Construct a token stream filtering the given input. + + + Close the input TokenStream. + + + Build a filter that removes words that are too long or too + short from the text. + + + + Returns the next input Token whose termText() is the right len + + + + Returns an array of strings, one for each file in the directory. + + + Returns true iff a file with the given name exists. + + + Returns the time the named file was last modified. + + + Set the modified time of an existing file to now. + + + Removes an existing file in the directory. + + + Renames an existing file in the directory. + If a file already exists with the new name, then it is replaced. + This replacement should be atomic. + + + + Returns the length of a file in the directory. + + + Creates a new, empty file in the directory with the given name. + Returns a stream writing this file. + + + + Returns a stream reading an existing file. + + + Construct a {@link Lock}. + the name of the lock file + + + + Closes the store. + + + Matches spans containing a term. + + + Construct a SpanTermQuery matching the named term's spans. + + + Return the term whose spans are matched. + + + Returns a collection of all terms matched by this query. + use extractTerms instead + + + + + + Returns true iff o is equal to this. + + + Returns a hash code value for this object. + + + Expert: an enumeration of span matches. Used to implement span searching. + Each span represents a range of term positions within a document. Matches + are enumerated in order, by increasing document number, within that by + increasing start position and finally by increasing end position. + + + + Move to the next match, returning true iff any such exists. + + + + Returns the document number of the current match. Initially invalid. + + + Returns the start position of the current match. Initially invalid. + + + Returns the end position of the current match. Initially invalid. + + + + All the term values, in natural order. + + + For each document, an index into the lookup array. + + + Creates one of these objects + + + Indicator for StringIndex values in the cache. + + + Expert: The cache used internally by sorting and range query classes. + + + Checks the internal cache for an appropriate entry, and if none is + found, reads the terms in field as integers and returns an array + of size reader.maxDoc() of the value each document + has in the given field. + + Used to get field values. + + Which field contains the integers. + + The values in the given field for each document. + + IOException If any error occurs. + + + Checks the internal cache for an appropriate entry, and if none is found, + reads the terms in field as integers and returns an array of + size reader.maxDoc() of the value each document has in the + given field. + + Used to get field values. + + Which field contains the integers. + + Computes integer for string values. + + The values in the given field for each document. + + IOException If any error occurs. + + + Checks the internal cache for an appropriate entry, and if + none is found, reads the terms in field as floats and returns an array + of size reader.maxDoc() of the value each document + has in the given field. + + Used to get field values. + + Which field contains the floats. + + The values in the given field for each document. + + IOException If any error occurs. + + + Checks the internal cache for an appropriate entry, and if + none is found, reads the terms in field as floats and returns an array + of size reader.maxDoc() of the value each document + has in the given field. + + Used to get field values. + + Which field contains the floats. + + Computes float for string values. + + The values in the given field for each document. + + IOException If any error occurs. + + + Checks the internal cache for an appropriate entry, and if none + is found, reads the term values in field and returns an array + of size reader.maxDoc() containing the value each document + has in the given field. + + Used to get field values. + + Which field contains the strings. + + The values in the given field for each document. + + IOException If any error occurs. + + + Checks the internal cache for an appropriate entry, and if none + is found reads the term values in field and returns + an array of them in natural order, along with an array telling + which element in the term array each document uses. + + Used to get field values. + + Which field contains the strings. + + Array of terms and index into the array for each document. + + IOException If any error occurs. + + + Checks the internal cache for an appropriate entry, and if + none is found reads field to see if it contains integers, floats + or strings, and then calls one of the other methods in this class to get the + values. For string values, a StringIndex is returned. After + calling this method, there is an entry in the cache for both + type AUTO and the actual found type. + + Used to get field values. + + Which field contains the values. + + int[], float[] or StringIndex. + + IOException If any error occurs. + + + Checks the internal cache for an appropriate entry, and if none + is found reads the terms out of field and calls the given SortComparator + to get the sort values. A hit in the cache will happen if reader, + field, and comparator are the same (using equals()) + as a previous call to this method. + + Used to get field values. + + Which field contains the values. + + Used to convert terms into something to sort by. + + Array of sort objects, one for each document. + + IOException If any error occurs. + + + Interface to parse ints from document fields. + + + + + Return an integer representation of this field's value. + + + Interface to parse floats from document fields. + + + + + Return an float representation of this field's value. + + + + Returns the number of term/value pairs in the set. + + + Returns the offset of the greatest index entry which is less than or equal to term. + + + Returns the TermInfo for a Term in the set, or null. + + + Scans within block for matching term. + + + Returns the nth term in the set. + + + Returns the position of a Term in the set or -1. + + + Returns an enumeration of all the Terms and TermInfos in the set. + + + Returns an enumeration of terms starting at or after the named term. + + + Increments the enumeration to the next element. True if one exists. + + + Optimized scan, without allocating new terms. + + + Returns the current Term in the enumeration. + Initially invalid, valid after next() called for the first time. + + + + Returns the previous Term enumerated. Initially null. + + + Returns the current TermInfo in the enumeration. + Initially invalid, valid after next() called for the first time. + + + + Sets the argument to the current TermInfo in the enumeration. + Initially invalid, valid after next() called for the first time. + + + + Returns the docFreq from the current TermInfo in the enumeration. + Initially invalid, valid after next() called for the first time. + + + + Closes the enumeration to further activity, freeing resources. + + + By default, closes the input Reader. + + + "Tokenizes" the entire stream as a single token. This is useful + for data like zip codes, ids, and some product names. + + + + Wraps a Spans, and can be used to form a linked list. + + + A remote searchable implementation. + + + $Id: RemoteSearchable.java 351472 2005-12-01 21:15:53Z bmesser $ + + + + Constructs and exports a remote searcher. + + + Exports a searcher for the index in args[0] named + "//localhost/Searchable". + + + + + Constructs an empty phrase query. + + + + Returns the slop. See setSlop(). + + + Adds a term to the end of the query phrase. + The relative position of the term is the one immediately after the last term added. + + + + Adds a term to the end of the query phrase. + The relative position of the term within the phrase is specified explicitly. + This allows e.g. phrases with more than one term at the same position + or phrases with gaps (e.g. in connection with stopwords). + + + + + + + + + Returns the set of terms in this phrase. + + + Returns the relative positions of terms in this phrase. + + + + + + + Prints a user-readable version of this query. + + + Returns true iff o is equal to this. + + + Returns a hash code value for this object. + + + This interface describes a character stream that maintains line and + column number positions of the characters. It also has the capability + to backup the stream to some extent. An implementation of this + interface is used in the TokenManager implementation generated by + JavaCCParser. + + All the methods except backup can be implemented in any fashion. backup + needs to be implemented correctly for the correct operation of the lexer. + Rest of the methods are all used to get information like line number, + column number and the String that constitutes a token and are not used + by the lexer. Hence their implementation won't affect the generated lexer's + operation. + + + + Returns the next character from the selected input. The method + of selecting the input is the responsibility of the class + implementing this interface. Can throw any java.io.IOException. + + + + Returns the column number of the last character for current token (being + matched after the last call to BeginTOken). + + + + Returns the line number of the last character for current token (being + matched after the last call to BeginTOken). + + + + Returns the column number of the first character for current token (being + matched after the last call to BeginTOken). + + + + Returns the line number of the first character for current token (being + matched after the last call to BeginTOken). + + + + Backs up the input stream by amount steps. Lexer calls this method if it + had already read some characters, but could not use them to match a + (longer) token. So, they will be used again as the prefix of the next + token and it is the implemetation's responsibility to do this right. + + + + Returns the next character that marks the beginning of the next token. + All characters must remain in the buffer between two successive calls + to this method to implement backup correctly. + + + + Returns a string made up of characters from the marked token beginning + to the current buffer position. Implementations have the choice of returning + anything that they want to. For example, for efficiency, one might decide + to just return null, which is a valid implementation. + + + + Returns an array of characters that make up the suffix of length 'len' for + the currently matched token. This is used to build up the matched string + for use in actions in the case of MORE. A simple and inefficient + implementation of this is as follows : + + { + String t = GetImage(); + return t.substring(t.length() - len, t.length()).toCharArray(); + } + + + + The lexer calls this function to indicate that it is done with the stream + and hence implementations can free any resources held by this class. + Again, the body of this function can be just empty and it will not + affect the lexer's operation. + + + + + The file format version, a negative number. + + + Expert: The fraction of terms in the "dictionary" which should be stored + in RAM. Smaller values use more memory, but make searching slightly + faster, while larger values use less memory and make searching slightly + slower. Searching is typically not dominated by dictionary lookup, so + tweaking this is rarely useful. + + + + Expert: The fraction of {@link TermDocs} entries stored in skip tables, + used to accellerate {@link TermDocs#SkipTo(int)}. Larger values result in + smaller indexes, greater acceleration, but fewer accelerable cases, while + smaller values result in bigger indexes, less acceleration and more + accelerable cases. More detailed experiments would be useful here. + + + + + Called to complete TermInfos creation. + + + A TermInfo is the record of information stored for a term. + + + The number of documents which contain the term. + + + + Default value for the write lock timeout (1,000). + + + Default value for the commit lock timeout (10,000). + + + Default value is 10. Change using {@link #SetMergeFactor(int)}. + + + Default value is 10. Change using {@link #SetMaxBufferedDocs(int)}. + + + Default value is 10,000. Change using {@link #SetMaxFieldLength(int)}. + + + Default value is 128. Change using {@link #SetTermIndexInterval(int)}. + + + Default value is {@link Integer#MAX_VALUE}. Change using {@link #SetMaxMergeDocs(int)}. + + + Use compound file setting. Defaults to true, minimizing the number of + files used. Setting this to false may improve indexing performance, but + may also cause file handle problems. + + + + Get the current setting of whether to use the compound file format. + Note that this just returns the value you set with setUseCompoundFile(boolean) + or the default. You cannot use this to query the status of an existing index. + + + + + + Setting to turn on usage of a compound file. When on, multiple files + for each segment are merged into a single file once the segment creation + is finished. This is done regardless of what directory is in use. + + + + Expert: Set the Similarity implementation used by this IndexWriter. + + + + + + + + Expert: Set the interval between indexed terms. Large values cause less + memory to be used by IndexReader, but slow random-access to terms. Small + values cause more memory to be used by an IndexReader, and speed + random-access to terms. + + This parameter determines the amount of computation required per query + term, regardless of the number of documents that contain that term. In + particular, it is the maximum number of other terms that must be + scanned before a term is located and its frequency and position information + may be processed. In a large index with user-entered query terms, query + processing time is likely to be dominated not by term lookup but rather + by the processing of frequency and positional data. In a small index + or when many uncommon query terms are generated (e.g., by wildcard + queries) term lookup may become a dominant cost. + + In particular, numUniqueTerms/interval terms are read into + memory by an IndexReader, and, on average, interval/2 terms + must be scanned for each random term access. + + + + + + + Expert: Return the interval between indexed terms. + + + + + + + Constructs an IndexWriter for the index in path. + Text will be analyzed with a. If create + is true, then a new, empty index will be created in + path, replacing the index already there, if any. + + + the path to the index directory + + the analyzer to use + + true to create the index or overwrite + the existing one; false to append to the existing + index + + IOException if the directory cannot be read/written to, or + if it does not exist, and create is + false + + + + Constructs an IndexWriter for the index in path. + Text will be analyzed with a. If create + is true, then a new, empty index will be created in + path, replacing the index already there, if any. + + + the path to the index directory + + the analyzer to use + + true to create the index or overwrite + the existing one; false to append to the existing + index + + IOException if the directory cannot be read/written to, or + if it does not exist, and create is + false + + + + Constructs an IndexWriter for the index in d. + Text will be analyzed with a. If create + is true, then a new, empty index will be created in + d, replacing the index already there, if any. + + + the index directory + + the analyzer to use + + true to create the index or overwrite + the existing one; false to append to the existing + index + + IOException if the directory cannot be read/written to, or + if it does not exist, and create is + false + + + + + + + + + The maximum number of terms that will be indexed for a single field in a + document. This limits the amount of memory required for indexing, so that + collections with very large files will not crash the indexing process by + running out of memory.

+ Note that this effectively truncates large documents, excluding from the + index terms that occur further in the document. If you know your source + documents are large, be sure to set this value high enough to accomodate + the expected size. If you set it to Integer.MAX_VALUE, then the only limit + is your memory, but you should anticipate an OutOfMemoryError.

+ By default, no more than 10,000 terms will be indexed for a field. +

+
+ + + + + + + + + + + + + + + + If non-null, information about merges and a message when + maxFieldLength is reached will be printed to this. + + + + + + + + Sets the maximum time to wait for a commit lock (in milliseconds). + + + + + + + Sets the maximum time to wait for a write lock (in milliseconds). + + + + + + + Flushes all changes to an index and closes all associated files. + + + Release the write lock, if needed. + + + Returns the Directory used by this index. + + + Returns the analyzer used by this index. + + + Returns the number of documents currently in this index. + + + The maximum number of terms that will be indexed for a single field in a + document. This limits the amount of memory required for indexing, so that + collections with very large files will not crash the indexing process by + running out of memory.

+ Note that this effectively truncates large documents, excluding from the + index terms that occur further in the document. If you know your source + documents are large, be sure to set this value high enough to accomodate + the expected size. If you set it to Integer.MAX_VALUE, then the only limit + is your memory, but you should anticipate an OutOfMemoryError.

+ By default, no more than 10,000 terms will be indexed for a field. + +

+
+ + Adds a document to this index. If the document contains more than + {@link #SetMaxFieldLength(int)} terms for a given field, the remainder are + discarded. + + + + Adds a document to this index, using the provided analyzer instead of the + value of {@link #GetAnalyzer()}. If the document contains more than + {@link #SetMaxFieldLength(int)} terms for a given field, the remainder are + discarded. + + + + + + + If non-null, information about merges will be printed to this. + + + Merges all segments together into a single segment, optimizing an index + for search. + + + + + Merges the provided indexes into this index. +

After this completes, the index is optimized.

+

The provided IndexReaders are not closed.

+
+
+ + Merges all RAM-resident segments. + + + Incremental segment merger. + + + Pops segments off of segmentInfos stack down to minSegment, merges them, + and pushes the merged index onto the top of the segmentInfos stack. + + + + Merges the named range of segments, replacing them in the stack with a + single segment. + + + + Filename filter that accept filenames and extensions only created by Lucene. + + + Daniel Naber / Bernhard Messer + + $rcs = ' $Id: Exp $ ' ; + + + + Describes the input token stream. + + + An integer that describes the kind of this token. This numbering + system is determined by JavaCCParser, and a table of these numbers is + stored in the file ...Constants.java. + + + + beginLine and beginColumn describe the position of the first character + of this token; endLine and endColumn describe the position of the + last character of this token. + + + + beginLine and beginColumn describe the position of the first character + of this token; endLine and endColumn describe the position of the + last character of this token. + + + + beginLine and beginColumn describe the position of the first character + of this token; endLine and endColumn describe the position of the + last character of this token. + + + + beginLine and beginColumn describe the position of the first character + of this token; endLine and endColumn describe the position of the + last character of this token. + + + + The string image of the token. + + + A reference to the next regular (non-special) token from the input + stream. If this is the last token from the input stream, or if the + token manager has not read tokens beyond this one, this field is + set to null. This is true only if this token is also a regular + token. Otherwise, see below for a description of the contents of + this field. + + + + This field is used to access special tokens that occur prior to this + token, but after the immediately preceding regular (non-special) token. + If there are no such special tokens, this field is set to null. + When there are more than one such special token, this field refers + to the last of these special tokens, which in turn refers to the next + previous special token through its specialToken field, and so on + until the first special token (whose specialToken field is null). + The next fields of special tokens refer to other special tokens that + immediately follow it (without an intervening regular token). If there + is no such token, this field is null. + + + + Returns the image. + + + Returns a new Token object, by default. However, if you want, you + can create and return subclass objects based on the value of ofKind. + Simply add the cases to the switch for all those special cases. + For example, if you have a subclass of Token called IDToken that + you want to create if ofKind is ID, simlpy add something like : + + case MyParserConstants.ID : return new IDToken(); + + to the following switch statement. Then you can cast matchedToken + variable to the appropriate type and use it in your lexical actions. + + + + + Constructs a tokenizer for this Reader. + + + + By default, closes the input Reader. + + + This exception is thrown when parse errors are encountered. + You can explicitly create objects of this exception type by + calling the method generateParseException in the generated + parser. + + You can modify this class to customize your error reporting + mechanisms so long as you retain the public fields. + + + + This constructor is used by the method "generateParseException" + in the generated parser. Calling this constructor generates + a new object of this type with the fields "currentToken", + "expectedTokenSequences", and "tokenImage" set. The boolean + flag "specialConstructor" is also set to true to indicate that + this constructor was used to create this object. + This constructor calls its super class with the empty string + to force the "toString" method of parent class "Throwable" to + print the error message in the form: + ParseException: <result of getMessage> + + + + The following constructors are for use by you for whatever + purpose you can think of. Constructing the exception in this + manner makes the exception behave in the normal way - i.e., as + documented in the class "Throwable". The fields "errorToken", + "expectedTokenSequences", and "tokenImage" do not contain + relevant information. The JavaCC generated code does not use + these constructors. + + + + This variable determines which constructor was used to create + this object and thereby affects the semantics of the + "getMessage" method (see below). + + + + This is the last token that has been consumed successfully. If + this object has been created due to a parse error, the token + followng this token will (therefore) be the first error token. + + + + Each entry in this array is an array of integers. Each array + of integers represents a sequence of tokens (by their ordinal + values) that is expected at this point of the parse. + + + + This is a reference to the "tokenImage" array of the generated + parser within which the parse error occurred. This array is + defined in the generated ...Constants interface. + + + + The end of line string for this machine. + + + Used to convert raw characters to their escaped version + when these raw version cannot be used as part of an ASCII + string literal. + + + + This method has the standard behavior when this object has been + created using the standard constructors. Otherwise, it uses + "currentToken" and "expectedTokenSequences" to generate a parse + error message and returns it. If this object has been created + due to a parse error, and you do not catch it (it gets thrown + from the parser), then this method is called during the printing + of the final stack trace, and hence the correct error message + gets displayed. + + + + Matches the union of its clauses. + + + Construct a SpanOrQuery merging the provided clauses. + + + Return the clauses whose spans are matched. + + + Returns a collection of all terms matched by this query. + use ExtractTerms instead + + + + + + + Sort by document score (relevancy). Sort values are Float and higher + values are at the front. + + + + Sort by document number (index order). Sort values are Integer and lower + values are at the front. + + + + Guess type of sort based on field contents. A regular expression is used + to look at the first term indexed for the field and determine if it + represents an integer number, a floating point number, or just arbitrary + string characters. + + + + Sort using term values as Strings. Sort values are String and lower + values are at the front. + + + + Sort using term values as encoded Integers. Sort values are Integer and + lower values are at the front. + + + + Sort using term values as encoded Floats. Sort values are Float and + lower values are at the front. + + + + Sort using a custom Comparator. Sort values are any Comparable and + sorting is done according to natural order. + + + + Represents sorting by document score (relevancy). + + + Represents sorting by document number (index order). + + + Creates a sort by terms in the given field where the type of term value + is determined dynamically ({@link #AUTO AUTO}). + + Name of field to sort by, cannot be null. + + + + Creates a sort, possibly in reverse, by terms in the given field where + the type of term value is determined dynamically ({@link #AUTO AUTO}). + + Name of field to sort by, cannot be null. + + True if natural order should be reversed. + + + + Creates a sort by terms in the given field with the type of term + values explicitly given. + + Name of field to sort by. Can be null if + type is SCORE or DOC. + + Type of values in the terms. + + + + Creates a sort, possibly in reverse, by terms in the given field with the + type of term values explicitly given. + + Name of field to sort by. Can be null if + type is SCORE or DOC. + + Type of values in the terms. + + True if natural order should be reversed. + + + + Creates a sort by terms in the given field sorted + according to the given locale. + + Name of field to sort by, cannot be null. + + Locale of values in the field. + + + + Creates a sort, possibly in reverse, by terms in the given field sorted + according to the given locale. + + Name of field to sort by, cannot be null. + + Locale of values in the field. + + + + Creates a sort with a custom comparison function. + Name of field to sort by; cannot be null. + + Returns a comparator for sorting hits. + + + + Creates a sort, possibly in reverse, with a custom comparison function. + Name of field to sort by; cannot be null. + + Returns a comparator for sorting hits. + + True if natural order should be reversed. + + + + Returns the name of the field. Could return null + if the sort is by SCORE or DOC. + + Name of field, possibly null. + + + + Returns the type of contents in the field. + One of the constants SCORE, DOC, AUTO, STRING, INT or FLOAT. + + + + Returns the Locale by which term values are interpreted. + May return null if no Locale was specified. + + Locale, or null. + + + + Returns whether the sort should be reversed. + True if natural order should be reversed. + + + + + Creates a comparator for the field in the given index. + Index to create comparator for. + + Field to create comparator for. + + Comparator of ScoreDoc objects. + + IOException If an error occurs reading the index. + + + A scorer that matches no document at all. + + + An iterator over {@link Hits} that provides lazy fetching of each document. + {@link Hits#Iterator()} returns an instance of this class. Calls to {@link #next()} + return a {@link Hit} instance. + + + Jeremy Rayner + + + + Constructed from {@link Hits#Iterator()}. + + + true if current hit is less than the total number of {@link Hits}. + + + + Unsupported operation. + + + UnsupportedOperationException + + + Returns the total number of hits. + + + Returns a {@link Hit} instance representing the next hit in {@link Hits}. + + + Next {@link Hit}. + + + + Expert: Describes the score computation for document and query. + + + The value assigned to this explanation node. + + + Sets the value assigned to this explanation node. + + + A description of this explanation node. + + + Sets the description of this explanation node. + + + The sub-nodes of this explanation node. + + + Adds a sub-node to this explanation node. + + + Render an explanation as text. + + + Render an explanation as HTML. + + + + Equivalent to longToString(Long.MIN_VALUE) + + + Equivalent to longToString(Long.MAX_VALUE) + + + The length of (all) strings returned by {@link #longToString} + + + Converts a long to a String suitable for indexing. + + + Converts a String that was returned by {@link #longToString} back to a + long. + + + IllegalArgumentException + if the input is null + + NumberFormatException + if the input does not parse (it was not a String returned by + longToString()). + + + + Filters LetterTokenizer with LowerCaseFilter and StopFilter. + + + An array containing some common English words that are not usually useful + for searching. + + + + Builds an analyzer which removes words in ENGLISH_STOP_WORDS. + + + Builds an analyzer with the stop words from the given set. + + + Builds an analyzer which removes words in the provided array. + + + Builds an analyzer with the stop words from the given file. + + + + + Builds an analyzer with the stop words from the given reader. + + + + + Filters LowerCaseTokenizer with StopFilter. + + + + Returns the next input Token, after being stemmed + + + Normalizes token text to lower case. + + + $Id: LowerCaseFilter.java 150259 2004-03-29 22:48:07Z cutting $ + + + + Describe class MultipleTermPositions here. + + + Anders Nielsen + + 1.0 + + + + Creates a new MultipleTermPositions instance. + + + + + + + Not implemented. + UnsupportedOperationException + + + Not implemented. + UnsupportedOperationException + + + Not implemented. + UnsupportedOperationException + + + Normalizes tokens extracted with {@link StandardTokenizer}. + + + Construct filtering in. + + + + An Analyzer that filters LetterTokenizer with LowerCaseFilter. + + + Methods for manipulating strings. + + $Id: StringHelper.java 150248 2004-03-25 13:39:59Z otis $ + + + + Compares two strings, character by character, and returns the + first position where the two strings differ from one another. + + + The first string to compare + + The second string to compare + + The first position where the two strings differ. + + + + A memory-resident {@link Directory} implementation. + + + $Id: RAMDirectory.java 351779 2005-12-02 17:37:50Z bmesser $ + + + + Constructs an empty {@link Directory}. + + + + Creates a new RAMDirectory instance from the {@link FSDirectory}. + + + a File specifying the index directory + + + + Creates a new RAMDirectory instance from the {@link FSDirectory}. + + + a String specifying the full index directory path + + + + Returns an array of strings, one for each file in the directory. + + + Returns true iff the named file exists in this directory. + + + Returns the time the named file was last modified. + + + Set the modified time of an existing file to now. + + + Returns the length in bytes of a file in the directory. + + + Removes an existing file in the directory. + + + Removes an existing file in the directory. + + + Creates a new, empty file in the directory with the given name. + Returns a stream writing this file. + + + + Returns a stream reading an existing file. + + + Construct a {@link Lock}. + the name of the lock file + + + + Closes the store to future operations. + + + A Query that matches documents within an exclusive range. A RangeQuery + is built by QueryParser for input like [010 TO 120]. + + + $Id: RangeQuery.java 329381 2005-10-29 09:26:21Z ehatcher $ + + + + Constructs a query selecting all terms greater than + lowerTerm but less than upperTerm. + There must be at least one term and either term may be null, + in which case there is no bound on that side, but if there are + two terms, both terms must be for the same field. + + + + Returns the field name for this query + + + Returns the lower term of this range query + + + Returns the upper term of this range query + + + Returns true if the range query is inclusive + + + Prints a user-readable version of this query. + + + Returns true iff o is equal to this. + + + Returns a hash code value for this object. + + + + + Creates a searcher which searches searchables. + + + Return the array of {@link Searchable}s this searches. + + + Returns index of the searcher for document n in the array + used to construct this searcher. + + + + Returns the document number of document n within its + sub-index. + + + + Create weight in multiple index scenario. + + Distributed query processing is done in the following steps: + 1. rewrite query + 2. extract necessary terms + 3. collect dfs for these terms from the Searchables + 4. create query weight using aggregate dfs. + 5. distribute that weight to Searchables + 6. merge results + + Steps 1-4 are done here, 5+6 in the search() methods + + + rewritten queries + + + + Document Frequency cache acting as a Dummy-Searcher. + This class is no full-fledged Searcher, but only supports + the methods necessary to initialize Weights. + + + + Creates a searcher which searches searchables. + + + TODO: parallelize this one too + + + A search implementation which spans a new thread for each + Searchable, waits for each search to complete and merge + the results back together. + + + + A search implementation allowing sorting which spans a new thread for each + Searchable, waits for each search to complete and merges + the results back together. + + + + + A thread subclass for searching a single searchable + + + + Support class used to handle threads + + + + + This interface should be implemented by any class whose instances are intended + to be executed by a thread. + + + + + This method has to be implemented in order that starting of the thread causes the object's + run method to be called in that separately executing thread. + + + + + Contains conversion support elements such as classes, interfaces and static methods. + + + + + Support class used to handle threads + + + + + The instance of System.Threading.Thread + + + + + Initializes a new instance of the ThreadClass class + + + + + Initializes a new instance of the Thread class. + + The name of the thread + + + + Initializes a new instance of the Thread class. + + A ThreadStart delegate that references the methods to be invoked when this thread begins executing + + + + Initializes a new instance of the Thread class. + + A ThreadStart delegate that references the methods to be invoked when this thread begins executing + The name of the thread + + + + This method has no functionality unless the method is overridden + + + + + Causes the operating system to change the state of the current thread instance to ThreadState.Running + + + + + Interrupts a thread that is in the WaitSleepJoin thread state + + + + + Blocks the calling thread until a thread terminates + + + + + Blocks the calling thread until a thread terminates or the specified time elapses + + Time of wait in milliseconds + + + + Blocks the calling thread until a thread terminates or the specified time elapses + + Time of wait in milliseconds + Time of wait in nanoseconds + + + + Resumes a thread that has been suspended + + + + + Raises a ThreadAbortException in the thread on which it is invoked, + to begin the process of terminating the thread. Calling this method + usually terminates the thread + + + + + Raises a ThreadAbortException in the thread on which it is invoked, + to begin the process of terminating the thread while also providing + exception information about the thread termination. + Calling this method usually terminates the thread. + + An object that contains application-specific information, such as state, which can be used by the thread being aborted + + + + Suspends the thread, if the thread is already suspended it has no effect + + + + + Obtain a String that represents the current Object + + A String that represents the current Object + + + + Gets the currently running thread + + The currently running thread + + + + Gets the current thread instance + + + + + Gets or sets the name of the thread + + + + + Gets or sets a value indicating the scheduling priority of a thread + + + + + Gets a value indicating the execution status of the current thread + + + + + Gets or sets a value indicating whether or not a thread is a background thread. + + + + + Represents the methods to support some operations over files. + + + + + Returns an array of abstract pathnames representing the files and directories of the specified path. + + The abstract pathname to list it childs. + An array of abstract pathnames childs of the path specified or null if the path is not a directory + + + + A simple class for number conversions. + + + + + Min radix value. + + + + + Max radix value. + + + + + Converts a number to System.String in the specified radix. + + A number to be converted. + A radix. + A System.String representation of the number in the specified redix. + + + + Parses a number in the specified radix. + + An input System.String. + A radix. + The parsed number in the specified radix. + + + + Performs an unsigned bitwise right shift with the specified number + + Number to operate on + Ammount of bits to shift + The resulting number from the shift operation + + + + Returns the index of the first bit that is set to true that occurs + on or after the specified starting index. If no such bit exists + then -1 is returned. + + The BitArray object. + The index to start checking from (inclusive). + The index of the next set bit. + + + + Mimics Java's Character class. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Use for .NET 1.1 Framework only. + + + + Extends TermFreqVector to provide additional information about + positions in which each of the terms is found. A TermPositionVector not necessarily + contains both positions and offsets, but at least one of these arrays exists. + + + + Provides access to stored term vector of + a document field. + + + + + The field this vector is associated with. + + + + + The number of terms in the term vector. + + + + An Array of term texts in ascending order. + + + + Array of term frequencies. Locations of the array correspond one to one + to the terms in the array obtained from getTerms + method. Each location in the array contains the number of times this + term occurs in the document or the document field. + + + + Return an index in the term numbers array returned from + getTerms at which the term with the specified + term appears. If this term does not appear in the array, + return -1. + + + + Just like indexOf(int) but searches for a number of terms + at the same time. Returns an array that has the same size as the number + of terms searched for, each slot containing the result of searching for + that term number. + + + array containing terms to look for + + index in the array where the list of terms starts + + the number of terms in the list + + + + Returns an array of positions in which the term is found. + Terms are identified by the index at which its number appears in the + term String array obtained from the indexOf method. + May return null if positions have not been stored. + + + + Returns an array of TermVectorOffsetInfo in which the term is found. + May return null if offsets have not been stored. + + + + + + The position in the array to get the offsets from + + An array of TermVectorOffsetInfo objects or the empty list + + + + + The number of the field this vector is associated with + + + + Returns an array of TermVectorOffsetInfo in which the term is found. + + + The position in the array to get the offsets from + + An array of TermVectorOffsetInfo objects or the empty list + + + + + + Returns an array of positions in which the term is found. + Terms are identified by the index at which its number appears in the + term String array obtained from the indexOf method. + + + + A FilterIndexReader contains another IndexReader, which it + uses as its basic source of data, possibly transforming the data along the + way or providing additional functionality. The class + FilterIndexReader itself simply implements all abstract methods + of IndexReader with versions that pass all requests to the + contained index reader. Subclasses of FilterIndexReader may + further override some of these methods and may also provide additional + methods and fields. + + + +

Construct a FilterIndexReader based on the specified base reader. + Directory locking for delete, undeleteAll, and setNorm operations is + left to the base reader.

+

Note that base reader is closed if this FilterIndexReader is closed.

+
+ specified base reader. + +
+ + Base class for filtering {@link TermDocs} implementations. + + + Base class for filtering {@link TermPositions} implementations. + + + Base class for filtering {@link TermEnum} implementations. + + + Class responsible for access to stored document fields. + + It uses <segment>.fdt and <segment>.fdx; files. + + + $Id: FieldsReader.java 329524 2005-10-30 05:38:46Z yonik $ + + + + A WhitespaceTokenizer is a tokenizer that divides text at whitespace. + Adjacent sequences of non-Whitespace characters form tokens. + + + + Construct a new WhitespaceTokenizer. + + + Collects only characters which do not satisfy + {@link Character#isWhitespace(char)}. + + + + Floating point numbers smaller than 32 bits. + + + yonik + + $Id$ + + + + + Converts an 8 bit float to a 32 bit float. + + + + byteToFloat(b, mantissaBits=3, zeroExponent=15) + + + + byteToFloat(b, mantissaBits=5, zeroExponent=2) + + + + Expert: Returned by low-level search implementations. + + + + + Expert: The total number of hits for the query. + + + + + Expert: The top hits for the query. + + + Expert: Stores the maximum score value encountered, needed for normalizing. + + + Expert: Returns the maximum score value encountered. + + + Expert: Sets the maximum score value encountered. + + + Expert: Constructs a TopDocs. + + + The fields which were used to sort results by. + + + Creates one of these objects. + Total number of hits for the query. + + The top hits for the query. + + The sort criteria used to find the top hits. + + The maximum score encountered. + + + + Expert: A Scorer for documents matching a Term. + + + + Returns the current document number matching the query. + Initially invalid, until {@link #Next()} is called the first time. + + + + + + + Returns a string representation of this TermScorer. + + + Matches spans which are near one another. One can specify slop, the + maximum number of intervening unmatched positions, as well as whether + matches are required to be in-order. + + + + Construct a SpanNearQuery. Matches spans matching a span from each + clause, with up to slop total unmatched positions between + them. * When inOrder is true, the spans from each clause + must be * ordered as in clauses. + + + + Return the clauses whose spans are matched. + + + Return the maximum number of intervening unmatched positions permitted. + + + Return true if matches are required to be in-order. + + + Returns a collection of all terms matched by this query. + use extractTerms instead + + + + + + Returns true iff o is equal to this. + + + + Constructs a filter which only matches documents matching + query. + + + + A Query that matches documents containing terms with a specified prefix. A PrefixQuery + is built by QueryParser for input like app*. + + + + Constructs a query for terms starting with prefix. + + + Returns the prefix of this query. + + + Prints a user-readable version of this query. + + + Returns true iff o is equal to this. + + + Returns a hash code value for this object. + + + + Equality compare on the term + + + Equality measure on the term + + + Indicates the end of the enumeration has been reached + + + Returns the docFreq of the current Term in the enumeration. + Returns -1 if no Term matches or all terms have been enumerated. + + + + Increments the enumeration to the next element. True if one exists. + + + Returns the current Term in the enumeration. + Returns null if no Term matches or all terms have been enumerated. + + + + Closes the enumeration to further activity, freeing resources. + + + Scorer for conjunctions, sets of queries, all of which are required. + + + Useful constants representing filenames and extensions used by lucene + + + Bernhard Messer + + $rcs = ' $Id: Exp $ ' ; + + + + Name of the index segment file + + + Name of the index deletable file + + + This array contains all filename extensions used by Lucene's index files, with + one exception, namely the extension made up from .f + a number. + Also note that two of Lucene's files (deletable and + segments) don't have any filename extension. + + + + File extensions of old-style index files + + + File extensions for term vector support + + + + Straightforward implementation of {@link Directory} as a directory of files. + + + + + Doug Cutting + + + + This cache of directories ensures that there is a unique Directory + instance per path, so that synchronization on the Directory can be used to + synchronize access between readers and writers. + + This should be a WeakHashMap, so that entries can be GC'd, but that would + require Java 1.2. Instead we use refcounts... + + + + Set whether Lucene's use of lock files is disabled. By default, + lock files are enabled. They should only be disabled if the index + is on a read-only medium like a CD-ROM. + + + + Returns whether Lucene's use of lock files is disabled. + true if locks are disabled, false if locks are enabled. + + + + Directory specified by Lucene.Net.lockDir + or java.io.tmpdir system property + + + + The default class which implements filesystem-based directories. + + + A buffer optionally used in renameTo method + + + + + Returns an array of strings, one for each file in the directory. + + + Returns true iff a file with the given name exists. + + + Returns the time the named file was last modified. + + + Returns the time the named file was last modified. + + + Set the modified time of an existing file to now. + + + Returns the length in bytes of a file in the directory. + + + Removes an existing file in the directory. + + + Renames an existing file in the directory. + + + Creates a new, empty file in the directory with the given name. + Returns a stream writing this file. + + + + Returns a stream reading an existing file. + + + So we can do some byte-to-hexchar conversion below + + + Constructs a {@link Lock} with the specified name. Locks are implemented + with {@link File#createNewFile()}. + + + the name of the lock file + + an instance of Lock holding the lock + + + + Closes the store to future operations. + + + For debug output. + + + Abstract base class for input from a file in a {@link Directory}. A + random-access input stream. Used for all Lucene index input operations. + + + + + + Reads and returns a single byte. + + + + + Reads a specified number of bytes into an array at the specified offset. + the array to read bytes into + + the offset in the array to start storing bytes + + the number of bytes to read + + + + + + Reads four bytes and returns an int. + + + + + Reads an int stored in variable-length format. Reads between one and + five bytes. Smaller values take fewer bytes. Negative numbers are not + supported. + + + + + + Reads eight bytes and returns a long. + + + + + Reads a long stored in variable-length format. Reads between one and + nine bytes. Smaller values take fewer bytes. Negative numbers are not + supported. + + + + Reads a string. + + + + + Reads UTF-8 encoded characters into an array. + the array to read characters into + + the offset in the array to start storing characters + + the number of characters to read + + + + + + Closes the stream to futher operations. + + + Returns the current position in this file, where the next read will + occur. + + + + + + Sets current position in this file, where the next read will occur. + + + + + The number of bytes in the file. + + + + + Represents sorting by computed relevance. Using this sort criteria returns + the same results as calling + {@link Searcher#Search(Query) Searcher#search()}without a sort criteria, + only with slightly more overhead. + + + + Represents sorting by index order. + + + Sorts by computed relevance. This is the same sort criteria as calling + {@link Searcher#Search(Query) Searcher#search()}without a sort criteria, + only with slightly more overhead. + + + + Sorts by the terms in field then by index order (document + number). The type of value in field is determined + automatically. + + + + + + + Sorts possibly in reverse by the terms in field then by + index order (document number). The type of value in field is + determined automatically. + + + + + + + Sorts in succession by the terms in each field. The type of value in + field is determined automatically. + + + + + + + Sorts by the criteria in the given SortField. + + + Sorts in succession by the criteria in each SortField. + + + Sets the sort to the terms in field then by index order + (document number). + + + + Sets the sort to the terms in field possibly in reverse, + then by index order (document number). + + + + Sets the sort to the terms in each field in succession. + + + Sets the sort to the given criteria. + + + Sets the sort to the given criteria in succession. + + + Representation of the sort criteria. + Array of SortField objects used in this sort criteria + + + + + Construct a ReqExclScorer. + The scorer that must match, except where + + indicates exclusion. + + + + + Returns the score of the current document matching the query. + Initially invalid, until {@link #Next()} is called the first time. + + The score of the required scorer. + + + + + Expert: Default scoring implementation. + + + Implemented as 1/sqrt(numTerms). + + + Implemented as 1/sqrt(sumOfSquaredWeights). + + + Implemented as sqrt(freq). + + + Implemented as 1 / (distance + 1). + + + Implemented as log(numDocs/(docFreq+1)) + 1. + + + Implemented as overlap / maxOverlap. + + + + Returns the field name for this query + + + Returns the value of the lower endpoint of this range query, null if open ended + + + Returns the value of the upper endpoint of this range query, null if open ended + + + Returns true if the lower endpoint is inclusive + + + Returns true if the upper endpoint is inclusive + + + Prints a user-readable version of this query. + + + Returns true if o is equal to this. + + + Returns a hash code value for this object. + + + + Construct a ParallelReader. + + + Add an IndexReader. + + + Add an IndexReader whose stored fields will not be returned. This can + accellerate search when stored fields are only needed from a subset of + the IndexReaders. + + + IllegalArgumentException if not all indexes contain the same number + of documents + + IllegalArgumentException if not all indexes have the same value + of {@link IndexReader#MaxDoc()} + + + + Loader for text files that represent a list of stopwords. + + + Gerhard Schwarz + + $Id: WordlistLoader.java 192989 2005-06-22 19:59:03Z dnaber $ + + + + Loads a text file and adds every line as an entry to a HashSet (omitting + leading and trailing whitespace). Every line of the file should contain only + one word. The words need to be in lowercase if you make use of an + Analyzer which uses LowerCaseFilter (like StandardAnalyzer). + + + File containing the wordlist + + A HashSet with the file's words + + + + Reads lines from a Reader and adds every line as an entry to a HashSet (omitting + leading and trailing whitespace). Every line of the Reader should contain only + one word. The words need to be in lowercase if you make use of an + Analyzer which uses LowerCaseFilter (like StandardAnalyzer). + + + Reader containing the wordlist + + A HashSet with the reader's words + + + + Builds a wordlist table, using words as both keys and values + for backward compatibility. + + + stopword set + + + + + + Wrapper used by {@link HitIterator} to provide a lazily loaded hit + from {@link Hits}. + + + Jeremy Rayner + + + + Constructed from {@link HitIterator} + Hits returned from a search + + Hit index in Hits + + + + Returns document for this hit. + + + + + + + Returns score for this hit. + + + + + + + Returns id for this hit. + + + + + + + Returns the boost factor for this hit on any field of the underlying document. + + + + + + + Returns the string value of the field with the given name if any exist in + this document, or null. If multiple fields exist with this name, this + method returns the first value added. If only binary fields with this name + exist, returns null. + + + + + + + Prints the parameters to be used to discover the promised result. + + + + + + + The termCompare method in FuzzyTermEnum uses Levenshtein distance to + calculate the distance between the given term and the comparing term. + + + + Finds and returns the smallest of three integers + + + + Grow the second dimension of the array, so that we can calculate the + Levenshtein difference. + + + + The max Distance is the maximum Levenshtein distance for the text + compared to some other value that results in score that is + better than the minimum similarity. + + the length of the "other value" + + the maximum levenshtein distance that we care about + + + + + Constructs a new query which applies a filter to the results of the original query. + Filter.bits() will be called every time this query is used in a search. + + Query to be filtered, cannot be null. + + Filter to apply to query results, cannot be null. + + + + Returns a Weight that applies the filter to the enclosed query's Weight. + This is accomplished by overriding the Scorer returned by the Weight. + + + + Rewrites the wrapped query. + + + Prints a user-readable version of this query. + + + Returns true iff o is equal to this. + + + Returns a hash code value for this object. + + + A query that generates the union of the documents produced by its subqueries, and that scores each document as the maximum + score for that document produced by any subquery plus a tie breaking increment for any additional matching subqueries. + This is useful to search for a word in multiple fields with different boost factors (so that the fields cannot be + combined equivalently into a single search field). We want the primary score to be the one associated with the highest boost, + not the sum of the field scores (as BooleanQuery would give). + If the query is "albino elephant" this ensures that "albino" matching one field and "elephant" matching + another gets a higher score than "albino" matching both fields. + To get this result, use both BooleanQuery and DisjunctionMaxQuery: for each term a DisjunctionMaxQuery searches for it in + each field, while the set of these DisjunctionMaxQuery's is combined into a BooleanQuery. + The tie breaker capability allows results that include the same term in multiple fields to be judged better than results that + include this term in only the best of those multiple fields, without confusing this with the better case of two different terms + in the multiple fields. + + Chuck Williams + + + + Creates a new empty DisjunctionMaxQuery. Use add() to add the subqueries. + this score of each non-maximum disjunct for a document is multiplied by this weight + and added into the final score. If non-zero, the value should be small, on the order of 0.1, which says that + 10 occurrences of word in a lower-scored field that is also in a higher scored field is just as good as a unique + word in the lower scored field (i.e., one that is not in any higher scored field. + + + + + Add a subquery to this disjunction + the disjunct added + + + + + + Optimize our representation and our subqueries representations + the IndexReader we query + + an optimized copy of us (which may not be a copy if there is nothing to optimize) + + + + Create a shallow copy of us -- used in rewriting if necessary + a copy of us (but reuse, don't copy, our subqueries) + + + + Prettyprint us. + the field to which we are applied + + a string that shows what we do, of the form "(disjunct1 | disjunct2 | ... | disjunctn)^boost" + + + + Return true iff we represent the same query as o + another object + + true iff o is a DisjunctionMaxQuery with the same boost and the same subqueries, in the same order, as us + + + + Compute a hash code for hashing us + the hash code + + + + + Alternative form of QueryParser.Operator.AND + + + Alternative form of QueryParser.Operator.OR + + + The actual operator that parser uses to combine query terms + + + Constructs a query parser. + the default field for query terms. + + used to find terms in the query text. + + + + Parses a query string, returning a {@link Lucene.Net.search.Query}. + the query string to be parsed. + + ParseException if the parsing fails + + + Returns the analyzer. + + + + Returns the field. + + + + Get the minimal similarity for fuzzy queries. + + + Set the minimum similarity for fuzzy queries. + Default is 0.5f. + + + + Get the prefix length for fuzzy queries. + Returns the fuzzyPrefixLength. + + + + Set the prefix length for fuzzy queries. Default is 0. + The fuzzyPrefixLength to set. + + + + Sets the default slop for phrases. If zero, then exact phrase matches + are required. Default value is zero. + + + + Gets the default slop for phrases. + + + Sets the boolean operator of the QueryParser. + In default mode (OR_OPERATOR) terms without any modifiers + are considered optional: for example capital of Hungary is equal to + capital OR of OR Hungary.
+ In AND_OPERATOR mode terms are considered to be in conjuction: the + above mentioned query is parsed as capital AND of AND Hungary +
+
+ + Gets implicit operator setting, which will be either AND_OPERATOR + or OR_OPERATOR. + + + + Whether terms of wildcard, prefix, fuzzy and range queries are to be automatically + lower-cased or not. Default is true. + + + + + + + + Set locale used by date range parsing. + + + Returns current locale, allowing access by subclasses. + + + throw in overridden method to disallow + + + + Base implementation delegates to {@link #GetFieldQuery(String,String)}. + This method may be overridden, for example, to return + a SpanNearQuery instead of a PhraseQuery. + + + throw in overridden method to disallow + + + + throw in overridden method to disallow + + + + Factory method for generating query, given a set of clauses. + By default creates a boolean query composed of clauses passed in. + + Can be overridden by extending classes, to modify query being + returned. + + + Vector that contains {@link BooleanClause} instances + to join. + + + Resulting {@link Query} object. + + throw in overridden method to disallow + + + + Factory method for generating query, given a set of clauses. + By default creates a boolean query composed of clauses passed in. + + Can be overridden by extending classes, to modify query being + returned. + + + Vector that contains {@link BooleanClause} instances + to join. + + true if coord scoring should be disabled. + + + Resulting {@link Query} object. + + throw in overridden method to disallow + + + + + + Factory method for generating a query (similar to + {@link #getWildcardQuery}). Called when parser parses + an input term token that has the fuzzy suffix (~) appended. + + + Name of the field query will use. + + Term token to use for building term for the query + + + Resulting {@link Query} built for the term + + throw in overridden method to disallow + + + + Returns a String where the escape char has been + removed, or kept only once if there was a double escape. + + + + Returns a String where those characters that QueryParser + expects to be escaped are escaped by a preceding \. + + + + + The default operator for parsing queries. + Use {@link QueryParser#setDefaultOperator} to change it. + + + + A Term represents a word from text. This is the unit of search. It is + composed of two elements, the text of the word, as a string, and the name of + the field that the text occured in, an interned string. + Note that terms may represent more than words from text fields, but also + things like dates, email addresses, urls, etc. + + + + Constructs a Term with the given field and text. + + + Returns the field of this term, an interned string. The field indicates + the part of a document which this term came from. + + + + Returns the text of this term. In the case of words, this is simply the + text of the word. In the case of dates and other types, this is an + encoding of the object as a string. + + + + Optimized construction of new Terms by reusing same field as this Term + - avoids field.intern() overhead + + The text of the new term (field is implicitly same as this Term instance) + + A new Term + + + + Compares two terms, returning true iff they have the same + field and text. + + + + Combines the hashCode() of the field and the text. + + + Compares two terms, returning a negative integer if this + term belongs before the argument, zero if this term is equal to the + argument, and a positive integer if this term belongs after the argument. + The ordering of terms is first by field, then by text. + + + + Resets the field and text of a Term. + + + + Constructs a new document with no fields. + + + Returns the number of fields in this document + Added as a helper for Lucene.Net + + + + +

Adds a field to a document. Several fields may be added with + the same name. In this case, if the fields are indexed, their text is + treated as though appended for the purposes of search.

+

Note that add like the removeField(s) methods only makes sense + prior to adding a document to an index. These methods cannot + be used to change the content of an existing index! In order to achieve this, + a document has to be deleted from an index and a new changed version of that + document has to be added.

+
+
+ +

Removes field with the specified name from the document. + If multiple fields exist with this name, this method removes the first field that has been added. + If there is no field with the specified name, the document remains unchanged.

+

Note that the removeField(s) methods like the add method only make sense + prior to adding a document to an index. These methods cannot + be used to change the content of an existing index! In order to achieve this, + a document has to be deleted from an index and a new changed version of that + document has to be added.

+
+
+ +

Removes all fields with the given name from the document. + If there is no field with the specified name, the document remains unchanged.

+

Note that the removeField(s) methods like the add method only make sense + prior to adding a document to an index. These methods cannot + be used to change the content of an existing index! In order to achieve this, + a document has to be deleted from an index and a new changed version of that + document has to be added.

+
+
+ + Returns a field with the given name if any exist in this document, or + null. If multiple fields exists with this name, this method returns the + first value added. + + + + Returns the string value of the field with the given name if any exist in + this document, or null. If multiple fields exist with this name, this + method returns the first value added. If only binary fields with this name + exist, returns null. + + + + Returns an Enumeration of all the fields in a document. + + + Returns an array of {@link Field}s with the given name. + This method can return null. + + + the name of the field + + a Field[] array + + + + Returns an array of values of the field specified as the method parameter. + This method can return null. + + + the name of the field + + a String[] of field values + + + + Returns an array of byte arrays for of the fields that have the name specified + as the method parameter. This method will return null if no + binary fields with the specified name are available. + + + the name of the field + + a byte[][] of binary field values. + + + + Returns an array of bytes for the first (or only) field that has the name + specified as the method parameter. This method will return null + if no binary fields with the specified name are available. + There may be non-binary fields with the same name. + + + the name of the field. + + a byte[] containing the binary field value. + + + + Prints the fields of a document for human consumption. + + + A Token is an occurence of a term from the text of a field. It consists of + a term's text, the start and end offset of the term in the text of the field, + and a type string. + The start and end offsets permit applications to re-associate a token with + its source text, e.g., to display highlighted query terms in a document + browser, or to show matching text fragments in a KWIC (KeyWord In Context) + display, etc. + The type is an interned string, assigned by a lexical analyzer + (a.k.a. tokenizer), naming the lexical or syntactic class that the token + belongs to. For example an end of sentence marker token might be implemented + with type "eos". The default token type is "word". + + + + + + + Returns the position increment of this Token. + + + + + Returns the Token's term text. + + + Returns this Token's starting offset, the position of the first character + corresponding to this token in the source text. + Note that the difference between endOffset() and startOffset() may not be + equal to termText.length(), as the term text may have been altered by a + stemmer or some other filter. + + + + Returns this Token's ending offset, one greater than the position of the + last character corresponding to this token in the source text. + + + + Returns this Token's lexical type. Defaults to "word". + + + Filters {@link StandardTokenizer} with {@link StandardFilter}, {@link + LowerCaseFilter} and {@link StopFilter}, using a list of English stop words. + + + $Id: StandardAnalyzer.java 219090 2005-07-14 20:36:28Z dnaber $ + + + + An array containing some common English words that are usually not + useful for searching. + + + + Builds an analyzer with the default stop words ({@link #STOP_WORDS}). + + + Builds an analyzer with the given stop words. + + + Builds an analyzer with the given stop words. + + + Builds an analyzer with the stop words from the given file. + + + + + Builds an analyzer with the stop words from the given reader. + + + + + Constructs a {@link StandardTokenizer} filtered by a {@link + StandardFilter}, a {@link LowerCaseFilter} and a {@link StopFilter}. + + + + + ***************************************** + String equality with support for wildcards + ****************************************** + + + + + Determines if a word matches a wildcard pattern. + Work released by Granta Design Ltd after originally being done on + company time. + + + + + Special comparator for sorting hits according to computed relevance (document score). + + + Special comparator for sorting hits according to index order (document number). + + + A ranked list of documents, used to hold search results. + + + Tries to add new documents to hitDocs. + Ensures that the hit numbered min has been retrieved. + + + + Returns the total number of hits available in this set. + + + + Returns the score for the nth document in this set. + + + Returns the id for the nth document in this set. + + + Returns a {@link HitIterator} to navigate the Hits. Each item returned + from {@link Iterator#next()} is a {@link Hit}. +

+ Caution: Iterate only over the hits needed. Iterating over all + hits is generally not desirable and may be the source of + performance issues. +

+
+
+ + + The scorer to which all scoring will be delegated, + except for computing and using the coordination factor. + + + + The number of optionalScorers that need to match (if there are any) + + + Create a BooleanScorer2. + The similarity to be used. + + The minimum number of optional added scorers + that should match during the search. + In case no required scorers are added, + at least one of the optional scorers will have to + match during the search. + + + + Create a BooleanScorer2. + In no required scorers are added, + at least one of the optional scorers will have to match during the search. + + The similarity to be used. + + + + + Returns the scorer to be used for match counting and score summing. + Uses requiredScorers, optionalScorers and prohibitedScorers. + + + + Returns the scorer to be used for match counting and score summing. + Uses the given required scorer and the prohibitedScorers. + + A required scorer already built. + + + + + + + Throws an UnsupportedOperationException. + TODO: Implement an explanation of the coordination factor. + + The document number for the explanation. + + UnsupportedOperationException + + + Count a scorer as a single match. + + + + This ctor used only by test code. + + + The Directory to merge the other segments into + + The name of the new segment + + + + Add an IndexReader to the collection of readers that are to be merged + + + + + + The index of the reader to return + + The ith reader to be merged + + + + Merges the readers specified by the {@link #add} method into the directory passed to the constructor + The number of documents that were merged + + IOException + + + close all IndexReaders that have been added. + Should not be called before merge(). + + IOException + + + + The number of documents in all of the readers + + IOException + + + Merge the TermVectors from each of the segments into the new one. + IOException + + + Merge one term found in one or more segments. The array smis + contains segments that are positioned at the same term. N + is the number of cells in the array actually occupied. + + + array of segments + + number of cells in the array actually occupied + + + + Process postings from multiple segments all positioned on the + same term. Writes out merged entries into freqOutput and + the proxOutput streams. + + + array of segments + + number of cells in the array actually occupied + + number of documents across all segments where this term was found + + + + + Converts a Date to a string suitable for indexing. + + + the date to be converted + + the desired resolution, see + {@link #Round(Date, DateTools.Resolution)} + + a string in format yyyyMMddHHmmssSSS or shorter, + depeding on resolution + + + + Converts a millisecond time to a string suitable for indexing. + + + the date expressed as milliseconds since January 1, 1970, 00:00:00 GMT + + the desired resolution, see + {@link #Round(long, DateTools.Resolution)} + + a string in format yyyyMMddHHmmssSSS or shorter, + depeding on resolution; using UTC as timezone + + + + Converts a string produced by timeToString or + DateToString back to a time, represented as the + number of milliseconds since January 1, 1970, 00:00:00 GMT. + + + the date string to be converted + + the number of milliseconds since January 1, 1970, 00:00:00 GMT + + ParseException if dateString is not in the + expected format + + + + Converts a string produced by timeToString or + DateToString back to a time, represented as a + Date object. + + + the date string to be converted + + the parsed time as a Date object + + ParseException if dateString is not in the + expected format + + + + Limit a date's resolution. For example, the date 2004-09-21 13:50:11 + will be changed to 2004-09-01 00:00:00 when using + Resolution.MONTH. + + + The desired resolution of the date to be returned + + the date with all values more precise than resolution + set to 0 or 1 + + + + Limit a date's resolution. For example, the date 1095767411000 + (which represents 2004-09-21 13:50:11) will be changed to + 1093989600000 (2004-09-01 00:00:00) when using + Resolution.MONTH. + + + The desired resolution of the date to be returned + + the date with all values more precise than resolution + set to 0 or 1, expressed as milliseconds since January 1, 1970, 00:00:00 GMT + + + + Specifies the time granularity. + + + An Analyzer that uses WhitespaceTokenizer. + + + A LetterTokenizer is a tokenizer that divides text at non-letters. That's + to say, it defines tokens as maximal strings of adjacent letters, as defined + by java.lang.Character.isLetter() predicate. + Note: this does a decent job for most European languages, but does a terrible + job for some Asian languages, where words are not separated by spaces. + + + + Construct a new LetterTokenizer. + + + Collects only characters which satisfy + {@link Character#isLetter(char)}. + + + + Emits the entire input as a single token. + + + + To replace accented characters in a String by unaccented equivalents. + + + A memory-resident {@link IndexInput} implementation. + + + $Id: RAMInputStream.java 150537 2004-09-28 20:45:26Z cutting $ + + + + Base implementation class for buffered {@link IndexInput}. + + + Expert: implements buffer refill. Reads bytes from the current position + in the input. + + the array to read bytes into + + the offset in the array to start storing bytes + + the number of bytes to read + + + + Expert: implements seek. Sets current position in this file, where the + next {@link #ReadInternal(byte[],int,int)} will occur. + + + + + + Implements the fuzzy search query. The similiarity measurement + is based on the Levenshtein (edit distance) algorithm. + + + + Create a new FuzzyQuery that will match terms with a similarity + of at least minimumSimilarity to term. + If a prefixLength > 0 is specified, a common prefix + of that length is also required. + + + the term to search for + + a value between 0 and 1 to set the required similarity + between the query term and the matching terms. For example, for a + minimumSimilarity of 0.5 a term of the same length + as the query term is considered similar to the query term if the edit distance + between both terms is less than length(term)*0.5 + + length of common (non-fuzzy) prefix + + IllegalArgumentException if minimumSimilarity is >= 1 or < 0 + or if prefixLength < 0 + + + + Calls {@link #FuzzyQuery(Term, float) FuzzyQuery(term, minimumSimilarity, 0)}. + + + Calls {@link #FuzzyQuery(Term, float) FuzzyQuery(term, 0.5f, 0)}. + + + Returns the minimum similarity that is required for this query to match. + float value between 0.0 and 1.0 + + + + Returns the non-fuzzy prefix length. This is the number of characters at the start + of a term that must be identical (not fuzzy) to the query term if the query + is to match that term. + + + + A query that wraps a filter and simply returns a constant score equal to the + query boost for every document in the filter. + + + yonik + + $Id$ + + + + Prints a user-readable version of this query. + + + Returns true if o is equal to this. + + + Returns a hash code value for this object. + + + Removes stop words from a token stream. + + + Construct a token stream filtering the given input. + + + Constructs a filter which removes words from the input + TokenStream that are named in the array of words. + + + + Construct a token stream filtering the given input. + + + The set of Stop Words, as Strings. If ignoreCase is true, all strings should be lower cased + + -Ignore case when stopping. The stopWords set must be setup to contain only lower case words + + + + Constructs a filter which removes words from the input + TokenStream that are named in the Set. + It is crucial that an efficient Set implementation is used + for maximum performance. + + + + + + + Builds a Set from an array of stop words, + appropriate for passing into the StopFilter constructor. + This permits this stopWords construction to be cached once when + an Analyzer is constructed. + + + + + + + + + + If true, all words are lower cased first. + + a Set containing the words + + + + Returns the next input Token whose termText() is not a stop word. + + + IndexInput methods + + + Method used for testing. Returns true if the underlying + file descriptor is valid. + + + + output methods: + + + Random-access methods + + + A Query that matches documents containing a term. + This may be combined with other terms with a {@link BooleanQuery}. + + + + Constructs a query for the term t. + + + Returns the term of this query. + + + Prints a user-readable version of this query. + + + Returns true iff o is equal to this. + + + Returns a hash code value for this object. + + + + Constructs from a Reader. + + + Lucene's package information, including version. * + + + The file format version, a negative number. + + + counts how often the index has been changed by adding or deleting docs. + starting with the current time in milliseconds forces to create unique version numbers. + + + + version number when this SegmentInfos was generated. + + + Current version number from segments file. + + + An IndexReader which reads multiple indexes, appending their content. + + + $Id: MultiReader.java 355181 2005-12-08 19:53:06Z cutting $ + + + +

Construct a MultiReader aggregating the named set of (sub)readers. + Directory locking for delete, undeleteAll, and setNorm operations is + left to the subreaders.

+

Note that all subreaders are closed if this Multireader is closed.

+
+ set of (sub)readers + + IOException +
+ + Construct reading the named set of readers. + + + Return an array of term frequency vectors for the specified document. + The array contains a vector for each vectorized field in the document. + Each vector vector contains term numbers and frequencies for all terms + in a given vectorized field. + If no such fields existed, the method returns null. + + + + + + + + Optimized implementation. + + + As yet unoptimized implementation. + + + + Stemmer, implementing the Porter Stemming Algorithm + + The Stemmer class transforms a word into its root form. The input + word can be provided a character at time (by calling add()), or at once + by calling one of the various stem(something) methods. + + + + reset() resets the stemmer so it can stem another word. If you invoke + the stemmer by calling add(char) and then Stem(), you must call reset() + before starting another word. + + + + Add a character to the word being stemmed. When you are finished + adding characters, you can call Stem(void) to process the word. + + + + After a word has been stemmed, it can be retrieved by toString(), + or a reference to the internal buffer can be retrieved by getResultBuffer + and getResultLength (which is generally more efficient.) + + + + Returns the length of the word resulting from the stemming process. + + + Returns a reference to a character buffer containing the results of + the stemming process. You also need to consult getResultLength() + to determine the length of the result. + + + + Stem a word provided as a String. Returns the result as a String. + + + Stem a word contained in a char[]. Returns true if the stemming process + resulted in a word different from the input. You can retrieve the + result with getResultLength()/getResultBuffer() or toString(). + + + + Stem a word contained in a portion of a char[] array. Returns + true if the stemming process resulted in a word different from + the input. You can retrieve the result with + getResultLength()/getResultBuffer() or toString(). + + + + Stem a word contained in a leading portion of a char[] array. + Returns true if the stemming process resulted in a word different + from the input. You can retrieve the result with + getResultLength()/getResultBuffer() or toString(). + + + + Stem the word placed into the Stemmer buffer through calls to add(). + Returns true if the stemming process resulted in a word different + from the input. You can retrieve the result with + getResultLength()/getResultBuffer() or toString(). + + + + Test program for demonstrating the Stemmer. It reads a file and + stems each word, writing the result to standard out. + Usage: Stemmer file-name + + + + Optimized implementation of a vector of bits. This is more-or-less like + java.util.BitSet, but also includes the following: +
    +
  • a count() method, which efficiently computes the number of one bits;
  • +
  • optimized read from and write to disk;
  • +
  • inlinable get() method;
  • +
+
+ Doug Cutting + + $Id: BitVector.java 150536 2004-09-28 18:15:52Z cutting $ + +
+ + Constructs a vector capable of holding n bits. + + + Sets the value of bit to one. + + + Sets the value of bit to zero. + + + Returns true if bit is one and + false if it is zero. + + + + Returns the number of bits in this vector. This is also one greater than + the number of the largest valid bit number. + + + + Returns the total number of one bits in this vector. This is efficiently + computed and cached, so that, if the vector is not changed, no + recomputation is done for repeated calls. + + + + Writes this vector to the file name in Directory + d, in a format that can be read by the constructor {@link + #BitVector(Directory, String)}. + + + + Constructs a bit vector from the file name in Directory + d, as written by the {@link #write} method. + + + + + + + + + + + The original list of terms from the query, can contain duplicates + + + + MultiPhraseQuery is a generalized version of PhraseQuery, with an added + method {@link #Add(Term[])}. + To use this class, to search for the phrase "Microsoft app*" first use + add(Term) on the term "Microsoft", then find all terms that have "app" as + prefix using IndexReader.terms(Term), and use MultiPhraseQuery.add(Term[] + terms) to add them to the query. + + + Anders Nielsen + + 1.0 + + + + Sets the phrase slop for this query. + + + + + Sets the phrase slop for this query. + + + + + Add a single term at the next position in the phrase. + + + + + Add multiple terms at the next position in the phrase. Any of the terms + may match. + + + + + + + Allows to specify the relative position of terms within the phrase. + + + + + + + + + + + + Returns the relative positions of terms in this phrase. + + + Prints a user-readable version of this query. + + + Returns true if o is equal to this. + + + Returns a hash code value for this object. + + + + The internal cache. Maps Entry to array of interpreted term values. * + + + See if an object is in the cache. + + + See if a custom object is in the cache. + + + Put an object into the cache. + + + Put a custom object into the cache. + + + The pattern used to detect float values in a field + removed for java 1.3 compatibility + protected static final Object pFloats = Pattern.compile ("[0-9+\\-\\.eEfFdD]+"); + + + + Expert: Every key in the internal cache is of this type. + + + Creates one of these objects. + + + Creates one of these objects for a custom comparator. + + + Two of these are equal iff they reference the same field and type. + + + Composes a hashcode based on the field and type. + + + A simple hash table of document scores within a range. + + + Lexical error occured. + + + An attempt wass made to create a second instance of a static token manager. + + + Tried to change to an invalid lexical state. + + + Detected (and bailed out of) an infinite loop in the token manager. + + + Indicates the reason why the exception is thrown. It will have + one of the above 4 values. + + + + Replaces unprintable characters by their espaced (or unicode escaped) + equivalents in the given string + + + + Returns a detailed message for the Error when it is thrown by the + token manager to indicate a lexical error. + Parameters : + EOFSeen : indicates if EOF caused the lexicl error + curLexState : lexical state in which this error occured + errorLine : line number when the error occured + errorColumn : column number when the error occured + errorAfter : prefix that was seen before this error occured + curchar : the offending character + Note: You can customize the lexical error message by modifying this method. + + + + You can also modify the body of this method to customize your error messages. + For example, cases like LOOP_DETECTED and INVALID_LEXICAL_STATE are not + of end-users concern, so you can return something like : + + "Internal Error : Please file a bug report .... " + + from this method for such cases in the release version of your parser. + + + + A QueryParser which constructs queries to search multiple fields. + + + Kelvin Tan, Daniel Naber + + $Revision: 295117 $ + + + + Creates a MultiFieldQueryParser. + +

It will, when parse(String query) + is called, construct a query like this (assuming the query consists of + two terms and you specify the two fields title and body):

+ + + (title:term1 body:term1) (title:term2 body:term2) + + +

When setDefaultOperator(AND_OPERATOR) is set, the result will be:

+ + + +(title:term1 body:term1) +(title:term2 body:term2) + + +

In other words, all the query's terms must appear, but it doesn't matter in + what fields they appear.

+
+
+ + + + + + Open an index with write access. + + + the index directory + + the analyzer to use for adding new documents + + true to create the index or overwrite the existing one; + false to append to the existing index + + + + Open an index with write access. + + + the index directory + + the analyzer to use for adding new documents + + true to create the index or overwrite the existing one; + false to append to the existing index + + + + Open an index with write access. + + + the index directory + + the analyzer to use for adding new documents + + true to create the index or overwrite the existing one; + false to append to the existing index + + + + Initialize an IndexWriter. + IOException + + + Throw an IllegalStateException if the index is closed. + IllegalStateException + + + Close the IndexReader and open an IndexWriter. + IOException + + + Close the IndexWriter and open an IndexReader. + IOException + + + Make sure all changes are written to disk. + IOException + + + Adds a document to this index, using the provided analyzer instead of the + one specific in the constructor. If the document contains more than + {@link #SetMaxFieldLength(int)} terms for a given field, the remainder are + discarded. + + + + IllegalStateException if the index is closed + + + Adds a document to this index. If the document contains more than + {@link #SetMaxFieldLength(int)} terms for a given field, the remainder are + discarded. + + + + IllegalStateException if the index is closed + + + Deletes all documents containing term. + This is useful if one uses a document field to hold a unique ID string for + the document. Then to delete such a document, one merely constructs a + term with the appropriate field and the unique ID string as its text and + passes it to this method. Returns the number of documents deleted. + + the number of documents deleted + + + + IllegalStateException if the index is closed + + + Deletes the document numbered docNum. + + + IllegalStateException if the index is closed + + + Returns the number of documents currently in this index. + + + + + IllegalStateException if the index is closed + + + Merges all segments together into a single segment, optimizing an index + for search. + + + + IllegalStateException if the index is closed + + + + IOException + + + + + Setting to turn on usage of a compound file. When on, multiple files + for each segment are merged into a single file once the segment creation + is finished. This is done regardless of what directory is in use. + + + + IllegalStateException if the index is closed + + + IOException + + + + + The maximum number of terms that will be indexed for a single field in a + document. This limits the amount of memory required for indexing, so that + collections with very large files will not crash the indexing process by + running out of memory.

+ Note that this effectively truncates large documents, excluding from the + index terms that occur further in the document. If you know your source + documents are large, be sure to set this value high enough to accomodate + the expected size. If you set it to Integer.MAX_VALUE, then the only limit + is your memory, but you should anticipate an OutOfMemoryError.

+ By default, no more than 10,000 terms will be indexed for a field. +

+ + + IllegalStateException if the index is closed +
+ + IOException + + + + + The maximum number of terms that will be indexed for a single field in a + document. This limits the amount of memory required for indexing, so that + collections with very large files will not crash the indexing process by + running out of memory.

+ Note that this effectively truncates large documents, excluding from the + index terms that occur further in the document. If you know your source + documents are large, be sure to set this value high enough to accomodate + the expected size. If you set it to Integer.MAX_VALUE, then the only limit + is your memory, but you should anticipate an OutOfMemoryError.

+ By default, no more than 10,000 terms will be indexed for a field. +

+ + + IllegalStateException if the index is closed +
+ + IOException + + + + + + IOException + + + + + Close this index, writing all pending changes to disk. + + + IllegalStateException if the index has been closed before already + + + + Create the compound stream in the specified file. The file name is the + entire name (no extensions are added). + + NullPointerException if dir or name is null + + + Returns the directory of the compound file. + + + Returns the name of the compound file. + + + Add a source stream. file is the string by which the + sub-stream will be known in the compound stream. + + + IllegalStateException if this writer is closed + NullPointerException if file is null + IllegalArgumentException if a file with the same name + has been added already + + + + Merge files with the extensions added up to now. + All files with these extensions are combined sequentially into the + compound stream. After successful merge, the source files + are deleted. + + IllegalStateException if close() had been called before or + if no file has been added to this object + + + + Copy the contents of the file with specified extension into the + provided output stream. Use the provided buffer for moving data + to reduce memory allocation. + + + + source file + + + temporary holder for the start of directory entry for this file + + + temporary holder for the start of this file's data section + + + Class for accessing a compound stream. + This class implements a directory, but is limited to only read operations. + Directory methods that would normally modify data throw an exception. + + + Dmitry Serebrennikov + + $Id: CompoundFileReader.java 208905 2005-07-03 10:40:01Z dnaber $ + + + + Returns an array of strings, one for each file in the directory. + + + Returns true iff a file with the given name exists. + + + Returns the time the compound file was last modified. + + + Set the modified time of the compound file to now. + + + Not implemented + UnsupportedOperationException + + + Not implemented + UnsupportedOperationException + + + Returns the length of a file in the directory. + IOException if the file does not exist + + + Not implemented + UnsupportedOperationException + + + Not implemented + UnsupportedOperationException + + + Implementation of an IndexInput that reads from a portion of the + compound file. The visibility is left as "package" *only* because + this helps with testing since JUnit test cases in a different class + can then access package fields of this class. + + + + Expert: implements buffer refill. Reads bytes from the current + position in the input. + + the array to read bytes into + + the offset in the array to start storing bytes + + the number of bytes to read + + + + Expert: implements seek. Sets current position in this file, where + the next {@link #ReadInternal(byte[],int,int)} will occur. + + + + + + Closes the stream to further operations. + + + + Constructs with default analyzer. + + + Any fields not specifically + defined to use a different analyzer will use the one provided here. + + + + Defines an analyzer to use for the specified field. + + + field name requiring a non-default analyzer + + non-default analyzer to use for field + + + + Some useful constants. + + + Doug Cutting + + $Id: Constants.java 189792 2005-06-09 18:58:30Z bmesser $ + + + + + + True iff this is Java version 1.1. + + + True iff this is Java version 1.2. + + + True iff this is Java version 1.3. + + + + True iff running on Linux. + + + True iff running on Windows. + + + True iff running on SunOS. + + + Removes matches which overlap with another SpanQuery. + + + Construct a SpanNotQuery matching spans from include which + have no overlap with spans from exclude. + + + + Return the SpanQuery whose matches are filtered. + + + Return the SpanQuery whose matches must not overlap those returned. + + + Returns a collection of all terms matched by this query. + use extractTerms instead + + + + + + Returns true iff o is equal to this. + + + Describes the input token stream. + + + An integer that describes the kind of this token. This numbering + system is determined by JavaCCParser, and a table of these numbers is + stored in the file ...Constants.java. + + + + beginLine and beginColumn describe the position of the first character + of this token; endLine and endColumn describe the position of the + last character of this token. + + + + beginLine and beginColumn describe the position of the first character + of this token; endLine and endColumn describe the position of the + last character of this token. + + + + beginLine and beginColumn describe the position of the first character + of this token; endLine and endColumn describe the position of the + last character of this token. + + + + beginLine and beginColumn describe the position of the first character + of this token; endLine and endColumn describe the position of the + last character of this token. + + + + The string image of the token. + + + A reference to the next regular (non-special) token from the input + stream. If this is the last token from the input stream, or if the + token manager has not read tokens beyond this one, this field is + set to null. This is true only if this token is also a regular + token. Otherwise, see below for a description of the contents of + this field. + + + + This field is used to access special tokens that occur prior to this + token, but after the immediately preceding regular (non-special) token. + If there are no such special tokens, this field is set to null. + When there are more than one such special token, this field refers + to the last of these special tokens, which in turn refers to the next + previous special token through its specialToken field, and so on + until the first special token (whose specialToken field is null). + The next fields of special tokens refer to other special tokens that + immediately follow it (without an intervening regular token). If there + is no such token, this field is null. + + + + Returns the image. + + + Returns a new Token object, by default. However, if you want, you + can create and return subclass objects based on the value of ofKind. + Simply add the cases to the switch for all those special cases. + For example, if you have a subclass of Token called IDToken that + you want to create if ofKind is ID, simlpy add something like : + + case MyParserConstants.ID : return new IDToken(); + + to the following switch statement. Then you can cast matchedToken + variable to the appropriate type and use it in your lexical actions. + + + + $Id: TermVectorsReader.java 170226 2005-05-15 15:04:39Z bmesser $ + + + + + The number of documents in the reader + + + + Retrieve the term vector for the given document and field + The document number to retrieve the vector for + + The field within the document to retrieve + + The TermFreqVector for the document and field or null if there is no termVector for this field. + + IOException if there is an error reading the term vector files + + + Return all term vectors stored for this document or null if the could not be read in. + + + The document number to retrieve the vector for + + All term frequency vectors + + IOException if there is an error reading the term vector files + + + + The field to read in + + The pointer within the tvf file where we should start reading + + The TermVector located at that position + + IOException + + + Access to the Field Info file that describes document fields and whether or + not they are indexed. Each segment has a separate Field Info file. Objects + of this class are thread-safe for multiple readers, but only one thread can + be adding documents at a time, with no other reader or writer threads + accessing this object. + + + + Construct a FieldInfos object using the directory and the name of the file + IndexInput + + The directory to open the IndexInput from + + The name of the file to open the IndexInput from in the Directory + + IOException + + + Adds field info for a Document. + + + Add fields that are indexed. Whether they have termvectors has to be specified. + + + The names of the fields + + Whether the fields store term vectors or not + + treu if positions should be stored. + + true if offsets should be stored + + + + Assumes the fields are not storing term vectors. + + + The names of the fields + + Whether the fields are indexed or not + + + + + + + Calls 5 parameter add with false for all TermVector parameters. + + + The name of the Field + + true if the field is indexed + + + + + + Calls 5 parameter add with false for term vector positions and offsets. + + + The name of the field + + true if the field is indexed + + true if the term vector should be stored + + + + If the field is not yet known, adds it. If it is known, checks to make + sure that the isIndexed flag is the same as was given previously for this + field. If not - marks it as being indexed. Same goes for the TermVector + parameters. + + + The name of the field + + true if the field is indexed + + true if the term vector should be stored + + true if the term vector with positions should be stored + + true if the term vector with offsets should be stored + + + + If the field is not yet known, adds it. If it is known, checks to make + sure that the isIndexed flag is the same as was given previously for this + field. If not - marks it as being indexed. Same goes for the TermVector + parameters. + + + The name of the field + + true if the field is indexed + + true if the term vector should be stored + + true if the term vector with positions should be stored + + true if the term vector with offsets should be stored + + true if the norms for the indexed field should be omitted + + + + Return the fieldName identified by its number. + + + + + the fieldName or an empty string when the field + with the given number doesn't exist. + + + + Return the fieldinfo object referenced by the fieldNumber. + + + the FieldInfo object or null when the given fieldNumber + doesn't exist. + + + + + Converts a Date to a string suitable for indexing. + RuntimeException if the date specified in the + method argument is before 1970 + + + + Converts a millisecond time to a string suitable for indexing. + RuntimeException if the time specified in the + method argument is negative, that is, before 1970 + + + + Converts a string-encoded date into a millisecond time. + + + Converts a string-encoded date into a Date object. + + + + Construct to collect a given number of hits. + the index to be searched + + the sort criteria + + the maximum number of hits to collect + + + + Matches spans near the beginning of a field. + + + Construct a SpanFirstQuery matching spans in match whose end + position is less than or equal to end. + + + + Return the SpanQuery whose matches are filtered. + + + Return the maximum end position permitted in a match. + + + Returns a collection of all terms matched by this query. + use ExtractTerms instead + + + + + + This exception is thrown when parse errors are encountered. + You can explicitly create objects of this exception type by + calling the method generateParseException in the generated + parser. + + You can modify this class to customize your error reporting + mechanisms so long as you retain the public fields. + + + + + The following constructors are for use by you for whatever + purpose you can think of. Constructing the exception in this + manner makes the exception behave in the normal way - i.e., as + documented in the class "Throwable". The fields "errorToken", + "expectedTokenSequences", and "tokenImage" do not contain + relevant information. The JavaCC generated code does not use + these constructors. + + + + This variable determines which constructor was used to create + this object and thereby affects the semantics of the + "getMessage" method (see below). + + + + This is the last token that has been consumed successfully. If + this object has been created due to a parse error, the token + followng this token will (therefore) be the first error token. + + + + Each entry in this array is an array of integers. Each array + of integers represents a sequence of tokens (by their ordinal + values) that is expected at this point of the parse. + + + + This is a reference to the "tokenImage" array of the generated + parser within which the parse error occurred. This array is + defined in the generated ...Constants interface. + + + + The end of line string for this machine. + + + Used to convert raw characters to their escaped version + when these raw version cannot be used as part of an ASCII + string literal. + + + + This method has the standard behavior when this object has been + created using the standard constructors. Otherwise, it uses + "currentToken" and "expectedTokenSequences" to generate a parse + error message and returns it. If this object has been created + due to a parse error, and you do not catch it (it gets thrown + from the parser), then this method is called during the printing + of the final stack trace, and hence the correct error message + gets displayed. + + + + Writer works by opening a document and then opening the fields within the document and then + writing out the vectors for each field. + + Rough usage: + + + for each document + { + writer.openDocument(); + for each field on the document + { + writer.openField(field); + for all of the terms + { + writer.addTerm(...) + } + writer.closeField + } + writer.closeDocument() + } + + + + $Id: TermVectorsWriter.java 150689 2004-11-29 21:42:02Z bmesser $ + + + + + Start processing a field. This can be followed by a number of calls to + addTerm, and a final call to closeField to indicate the end of + processing of this field. If a field was previously open, it is + closed automatically. + + + + Finished processing current field. This should be followed by a call to + openField before future calls to addTerm. + + + + Return true if a field is currently open. + + + Add term to the field's term vector. Field must already be open. + Terms should be added in + increasing order of terms, one call per unique termNum. ProxPointer + is a pointer into the TermPosition file (prx). Freq is the number of + times this term appears in this field, in this document. + + IllegalStateException if document or field is not open + + + Add a complete document specified by all its term vectors. If document has no + term vectors, add value for tvx. + + + + + IOException + + + Close all streams. + + + + Construct a new LowerCaseTokenizer. + + + Collects only characters which satisfy + {@link Character#isLetter(char)}. + + +
+
diff --git a/tools/NHibernate/NHibernate.DomainModel.dll b/tools/NHibernate/NHibernate.DomainModel.dll new file mode 100644 index 000000000..a0b1e7ac7 Binary files /dev/null and b/tools/NHibernate/NHibernate.DomainModel.dll differ diff --git a/tools/NHibernate/NHibernate.DomainModel.pdb b/tools/NHibernate/NHibernate.DomainModel.pdb new file mode 100644 index 000000000..062156537 Binary files /dev/null and b/tools/NHibernate/NHibernate.DomainModel.pdb differ diff --git a/tools/NHibernate/NHibernate.DomainModel.xml b/tools/NHibernate/NHibernate.DomainModel.xml new file mode 100644 index 000000000..2c6c6b13f --- /dev/null +++ b/tools/NHibernate/NHibernate.DomainModel.xml @@ -0,0 +1,1271 @@ + + + + NHibernate.DomainModel + + + + + Summary description for AuditComponent. + + + + + Summary description for BasicClass. + + + + + + + + NHibernate knows nothing about this Property. This Property + is provided so the Test Fixtures can set and get the value of the + field _privateField to make sure that NHibernate is reading + and writing the field correctly. + + + + + Used to test how NHibernate handles mappings for type="Object" + and type="Any" + + + This class is used in two hbm.xml files. + + + + + Summary description for BasicObject. + + + + + Summary description for BasicSerializable. + + + + + Summary description for BasicTime. + + + + + Summary description for Child. + + + + + Summary description for ClassWithNullColumns. + + + + + Test the ability of CodeDOM bytecode provider to generate code that + can set a value type from a null. + + + + + A class that cannot be used with lazy="true" if proxy validation + is enabled. + + + + + Summary description for LLParent. + + + + + Summary description for LLChild. + + + + + Summary description for LLChild. + + + + + Summary description for Node. + + + + + This is the only way to hook nodes together right now. + + A Node this Node can go to. + + + + The Nodes that lead into this Node. + + + I would not recommend that mapping of set be made public because + under the scene they rely on Dictionaries, but this is in here for + testing. + + Any modifications to the "inverse" side should not be persisted - unless + the modifications are also made to the non-inverse side. + + + + + The Nodes this Node can go To. + + + I would not recommend that mapping of set be made public because + under the scene they rely on Dictionaries, but this is in here for + testing. The DestinationNodes is the Property that controls which + modifications get persisted. + + + + + A nullable type that wraps an value. + + + + + A NHibernate for a . + + + + + Abstract type used for implementing NHibernate s for + the Nullables library. + + + + + Converts a value of 0 to a DbNull + + + + + Class mapped with optimistic-lock="all" + + + + + Summary description for Parent. + + + + + Summary description for ParentComparer. + + + + + Summary description for SexType. + + + + + Summary description for SimpleComponent. + + + + + Summary description for Team. + + + + + Summary description for UnsavedType. + + + + + POCO for A + + + + + Holder for id + + + + + Holder for name + + + + + Holder for anotherName + + + + + Holder for forward + + + + + Default constructor for class A + + + + + Constructor for class A + + Initial name value + + + + Get/set for id + + + + + Get/set for name + + + + + Get/set for anotherName + + + + + POJO for Foo + + + This class is autogenerated + + + + + Default constructor for class Foo + + + + + Get/set for key + + + + + Get/set for long + + + + + Get/set for integer + + + + + Get/set for float + + + + + Get/set for x + + + + + Get/set for date + + + + + Get/set for timestamp + + + + + Get/set for boolean + + + + + Get/set for bool + + + + + Get/set for null + + + + + Get/set for short + + + + + Get/set for char + + + + + Get/set for zero + + + + + Get/set for int + + + + + Get/set for string + + + + + Get/set for byte + + + + + Get/set for yesno + + + + + Get/set for status + + + + + Get/set for locale + + + + + Get/set for formula + + + + + Get/set for custom + + + + + Get/set for version + + + + + Get/set for foo + + + + + Get/set for dependent + + + + + Gets or sets the component + + + + + Gets or sets the _time + + + + + Gets or sets the _abstract + + + + + Summary description for Assignable. + + + + + POJO for B + + + This class is autogenerated + + + + + Holder for count + + + + + Holder for map + + + + + Default constructor for class B + + + + + Constructor for class B + + Initial name value + Initial count value + Initial map value + + + + Minimal constructor for class B + + Initial map value + + + + Get/set for count + + + + + Get/set for map + + + + + Gets or sets the X + + + + + Gets or sets the _barString + + + + + Gets or sets the _barComponent + + + + + Gets or sets the _baz + + + + + Gets or sets the _name + + + + + Gets or sets the _object + + + + + Summary description for BasicNameable. + + + + + Summary description for INameable. + + + + + Default constructor for class Baz + + + + + Gets or sets the _collectionComponent + + + + + Get/set for Code + + + + + Get/set for count + + + + + Get/set for name + + + + + Get/set for Foo + + + + + Get/set for stringList + + + + + Get/set for fees + + + + + Get/set for customs + + + + + Get/set for topComponents + + + + + Get/set for fooToGlarch + + + + + Get/set for fooComponentToFoo + + + + + Get/set for glarchToFoo + + + + + Get/set for stringDateMap + + + + + Get/set for topGlarchez + + + + + Get/set for cachedMap + + + + + Get/set for stringGlarchMap + + + + + Get/set for anyToAny + + + + + Get/set for manyToAny + + + + + Gets or sets the intArray + + + + + Gets or sets the _components + + + + + Gets or sets the timeArray + + + + + Gets or sets the stringArray + + + + + Gets or sets the fooArray + + + + + Get/set for fooSet + + + + + Get/set for stringSet + + + + + Get/set for topFoos + + + + + Get/set for cascadingBars + + + + + Get/set for cached + + + + + Get/set for sortablez + + + + + Get/set for bag + + + + + Get/set for fooBag + + + + + Get/set for bazez + + + + + Get/set for idFooBag + + + + + Get/set for byteBag + + + + + Get/set for parts + + + + + Summary description for Blobber. + + + + + POJO for C1 + + + This class is autogenerated + + + + + Holder for address + + + + + Holder for d + + + + + Holder for c2 + + + + + Holder for c2s + + + + + Default constructor for class C1 + + + + + Constructor for class C1 + + Initial name value + Initial count value + Initial map value + Initial address value + Initial d value + + + + Minimal constructor for class C1 + + Initial map value + + + + Get/set for address + + + + + Get/set for d + + + + + POJO for C2 + + + This class is autogenerated + + + + + Holder for address + + + + + Holder for c1 + + + + + Holder for c1s + + + + + Default constructor for class C2 + + + + + Constructor for class C2 + + Initial name value + Initial count value + Initial map value + Initial address value + + + + Minimal constructor for class C2 + + Initial map value + + + + Get/set for address + + + + + Summary description for Category. + + + + + Summary description for Child. + + + + + Summary description for Circular. + + + + + Summary description for Component. + + + + + Holds the _foos + + + + + Holds the _str + + + + + Holds the _floats + + + + + Gets or sets the _foos + + + + + Gets or sets the _str + + + + + Gets or sets the _floats + + + + + Summary description for Componentizable. + + + + + Default constructor for class CompositeElement + + + + + Constructor for class CompositeElement + + Initial foo value + Initial bar value + + + + Get/set for foo + + + + + Get/set for bar + + + + + Summary description for Contained. + + + + + Summary description for Custom. + + + + + Summary description for CustomPersister. + + + + + POCO for D + + + + + Default constructor for class D + + + + + Constructor for class D + + Initial id value + Initial amount value + + + + Minimal constructor for class D + + Initial id value + + + + Get/set for id + + + + + Get/set for Amount + + + + + Summary description for Detail. + + + + + Summary description for Down. + + + + + Summary description for Up. + + + + + + + + + This is important, otherwise the Identifier and Instance don't match inside SessionImpl + + + + POCO for E + + + + + Get/set for id + + + + + Get/set for Amount + + + + + Summary description for Eye. + + + + + POJO for FooComponent + + + This class is autogenerated + + + + + Holder for name + + + + + Holder for count + + + + + Default constructor for class FooComponent + + + + + Constructor for class FooComponent + + Initial name value + Initial count value + + + + Get/set for name + + + + + Get/set for count + + + + + Summary description for Fumm. + + + + + Gets or sets the _next + + + + + Gets or sets the _order + + + + + Gets or sets the _strings + + + + + Gets or sets the _stringSets + + + + + Gets or sets the _fooComponents + + + + + Gets or sets the _proxyArray + + + + + Gets or sets the _proxySet + + + + + Gets or sets the _immutable + + + + + Gets or sets the _derivedVersion + + + + + Gets or sets the _any + + + + + Gets or sets the _multiple + + + + + Summary description for Holder. + + + + + Summary description for Immutable. + + + + + Summary description for Inner. + + + + + Summary description for InnerKey. + + + + + Summary description for Jay. + + + + + Summary description for Location. + + + + + Summary description for M. + + + + + Summary description for Many. + + + + + Summary description for Master. + + + + + Summary description for Middle. + + + + + Summary description for MiddleKey. + + + + + Summary description for MoreStuff. + + + + + Summary description for N. + + + + + Holds the _nested + + + + + Gets or sets the _nested + + + + + Summary description for One. + + + + + Summary description for Outer. + + + + + Summary description for OuterKey. + + + + + Summary description for Parent. + + + + + Gets or sets the _foo + + + + + Gets or sets the _created + + + + + Gets or sets the _deleted + + + + + Gets or sets the _loaded + + + + + Gets or sets the _stored + + + + + Gets or sets the _key + + + + + Gets or sets the _stuff + + + + + Gets or sets the _fums (<set>) + + + + + Gets or sets the _moreFums + + + + + Gets or sets the _childKey + + + + + Summary description for Result. + + + + + Summary description for Several. + + + + + Summary description for Single. + + + + + POJO for Sortable + + + This class is autogenerated + + + + + Holder for id + + + + + Holder for name + + + + + Default constructor for class Sortable + + + + + Constructor for class Sortable + + Initial name value + + + + Get/set for id + + + + + Get/set for name + + + + + Summary description for Stuff. + + + + + Summary description for SubComponent. + + + + + Summary description for SubDetail. + + + + + Summary description for Vetoer. + + + + + Summary description for W. + + + + + Summary description for X. + + + + + Summary description for Y. + + + + + Summary description for Z. + + + + diff --git a/tools/NHibernate/NHibernate.Examples.dll b/tools/NHibernate/NHibernate.Examples.dll new file mode 100644 index 000000000..e790fd9d3 Binary files /dev/null and b/tools/NHibernate/NHibernate.Examples.dll differ diff --git a/tools/NHibernate/NHibernate.Examples.dll.config b/tools/NHibernate/NHibernate.Examples.dll.config new file mode 100644 index 000000000..a6908f2be --- /dev/null +++ b/tools/NHibernate/NHibernate.Examples.dll.config @@ -0,0 +1,53 @@ + + + +
+
+ + + + + NHibernate.Connection.DriverConnectionProvider, NHibernate + + + NHibernate.Driver.SqlClientDriver + + Server=(local);initial catalog=nhibernate;Integrated Security=SSPI + + true + NHibernate.Dialect.MsSql2000Dialect + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tools/NHibernate/NHibernate.Examples.pdb b/tools/NHibernate/NHibernate.Examples.pdb new file mode 100644 index 000000000..07144c681 Binary files /dev/null and b/tools/NHibernate/NHibernate.Examples.pdb differ diff --git a/tools/NHibernate/NHibernate.Linq.dll b/tools/NHibernate/NHibernate.Linq.dll new file mode 100644 index 000000000..d9791c73d Binary files /dev/null and b/tools/NHibernate/NHibernate.Linq.dll differ diff --git a/tools/NHibernate/NHibernate.Linq.pdb b/tools/NHibernate/NHibernate.Linq.pdb new file mode 100644 index 000000000..539a64850 Binary files /dev/null and b/tools/NHibernate/NHibernate.Linq.pdb differ diff --git a/tools/NHibernate/NHibernate.Test.Performance.dll b/tools/NHibernate/NHibernate.Test.Performance.dll new file mode 100644 index 000000000..4abd26138 Binary files /dev/null and b/tools/NHibernate/NHibernate.Test.Performance.dll differ diff --git a/tools/NHibernate/NHibernate.Test.Performance.dll.config b/tools/NHibernate/NHibernate.Test.Performance.dll.config new file mode 100644 index 000000000..6663a0367 --- /dev/null +++ b/tools/NHibernate/NHibernate.Test.Performance.dll.config @@ -0,0 +1,85 @@ + + + +
+
+ + + + + + + + + + + + + + NHibernate.Test.DebugConnectionProvider, NHibernate.Test + NHibernate.Cache.HashtableCacheProvider, NHibernate + true + ReadCommitted + + NHibernate.Driver.SqlClientDriver + + Server=(local);initial catalog=nhibernate;Integrated Security=SSPI + + false + NHibernate.Dialect.MsSql2000Dialect + true + 444 + true 1, false 0, yes 'Y', no 'N' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tools/NHibernate/NHibernate.Test.Performance.pdb b/tools/NHibernate/NHibernate.Test.Performance.pdb new file mode 100644 index 000000000..5c0777b0a Binary files /dev/null and b/tools/NHibernate/NHibernate.Test.Performance.pdb differ diff --git a/tools/NHibernate/NHibernate.Test.dll b/tools/NHibernate/NHibernate.Test.dll new file mode 100644 index 000000000..153ad15a6 Binary files /dev/null and b/tools/NHibernate/NHibernate.Test.dll differ diff --git a/tools/NHibernate/NHibernate.Test.dll-results.xml b/tools/NHibernate/NHibernate.Test.dll-results.xml new file mode 100644 index 000000000..042efe509 --- /dev/null +++ b/tools/NHibernate/NHibernate.Test.dll-results.xml @@ -0,0 +1,3322 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tools/NHibernate/NHibernate.Test.dll.config b/tools/NHibernate/NHibernate.Test.dll.config new file mode 100644 index 000000000..0b5f00d5e --- /dev/null +++ b/tools/NHibernate/NHibernate.Test.dll.config @@ -0,0 +1,136 @@ + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + NHibernate.Test.DebugConnectionProvider, NHibernate.Test + NHibernate.Cache.HashtableCacheProvider, NHibernate + true + false + false + + ReadCommitted + + + NHibernate.Driver.SqlClientDriver + + Server=(local);initial catalog=nhibernate;Integrated Security=SSPI + + false + NHibernate.Dialect.MsSql2005Dialect + true + 444 + true 1, false 0, yes 'Y', no 'N' + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tools/NHibernate/NHibernate.Test.pdb b/tools/NHibernate/NHibernate.Test.pdb new file mode 100644 index 000000000..e044beb88 Binary files /dev/null and b/tools/NHibernate/NHibernate.Test.pdb differ diff --git a/tools/NHibernate/NHibernate.Tool.HbmXsd.exe b/tools/NHibernate/NHibernate.Tool.HbmXsd.exe new file mode 100644 index 000000000..1bcd2ed6f Binary files /dev/null and b/tools/NHibernate/NHibernate.Tool.HbmXsd.exe differ diff --git a/tools/NHibernate/NHibernate.Tool.HbmXsd.pdb b/tools/NHibernate/NHibernate.Tool.HbmXsd.pdb new file mode 100644 index 000000000..9e29492fa Binary files /dev/null and b/tools/NHibernate/NHibernate.Tool.HbmXsd.pdb differ diff --git a/tools/NHibernate/NHibernate.dll b/tools/NHibernate/NHibernate.dll new file mode 100644 index 000000000..b1cb0d3e9 Binary files /dev/null and b/tools/NHibernate/NHibernate.dll differ diff --git a/tools/NHibernate/NHibernate.license.txt b/tools/NHibernate/NHibernate.license.txt new file mode 100644 index 000000000..8a88d1489 --- /dev/null +++ b/tools/NHibernate/NHibernate.license.txt @@ -0,0 +1,460 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + diff --git a/tools/NHibernate/NHibernate.pdb b/tools/NHibernate/NHibernate.pdb new file mode 100644 index 000000000..e54f9e202 Binary files /dev/null and b/tools/NHibernate/NHibernate.pdb differ diff --git a/tools/NHibernate/NHibernate.xml b/tools/NHibernate/NHibernate.xml new file mode 100644 index 000000000..ed065aff7 --- /dev/null +++ b/tools/NHibernate/NHibernate.xml @@ -0,0 +1,36484 @@ + + + + NHibernate + + + + + Implementation of BulkOperationCleanupAction. + + + + + An operation which may be scheduled for later execution. + Usually, the operation is a database insert/update/delete, + together with required second-level cache management. + + + + Called before executing any actions + + + Execute this action + + + + Do we need to retain this instance until after the transaction completes? + + + False if this class defines a no-op has after transaction completion. + + + + Called after the transaction completes + + + + What spaces (tables) are affected by this action? + + + + + Create an action that will evict collection and entity regions based on queryspaces (table names). + + + + + Any action relating to insert/update/delete of a collection + + + + + Initializes a new instance of . + + The that is responsible for the persisting the Collection. + The Persistent collection. + The identifier of the Collection. + The that the Action is occuring in. + + + Called before executing any actions + + + Execute this action + + + + Do we need to retain this instance until after the transaction completes? + + + False if this class defines a no-op has after transaction completion. + + + + Called after the transaction completes + + + + Compares the current object with another object of the same type. + + + A 32-bit signed integer that indicates the relative order of the objects being compared. The return value has the following meanings: Value Meaning Less than zero This object is less than the other parameter.Zero This object is equal to other. Greater than zero This object is greater than other. + + An object to compare with this object. + + + + What spaces (tables) are affected by this action? + + + + Execute this action + + + + Acts as a stand-in for an entity identifier which is supposed to be + generated on insert (like an IDENTITY column) where the insert needed to + be delayed because we were outside a transaction when the persist + occurred (save currently still performs the insert). + + The stand-in is only used within the see cref="NHibernate.Engine.PersistenceContext" + in order to distinguish one instance from another; it is never injected into + the entity instance or returned to the client... + + + + + Base class for actions relating to insert/update/delete of an entity + instance. + + + + + Instantiate an action. + + The session from which this action is coming. + The id of the entity + The entiyt instance + The entity persister + + + + Entity name accessor + + + + + Entity Id accessor + + + + + Entity Instance + + + + + Session from which this action originated + + + + + The entity persister. + + + + + Manages prepared statements and batching. Class exists to enforce separation of concerns + + + + + Manages s and s + for an . + + +

+ Abstracts ADO.NET batching to maintain the illusion that a single logical batch + exists for the whole session, even when batching is disabled. + Provides transparent IDbCommand caching. +

+

+ This will be useful once ADO.NET gets support for batching. Until that point + no code exists that will do batching, but this will provide a good point to do + error checking and making sure the correct number of rows were affected. +

+
+
+ + + Get an for using in loading / querying. + + The to convert to an . + The of the command. + The SqlTypes of parameters + in . + + An that is ready to be executed. + + + + If not explicitly released by , it will be + released when the session is closed or disconnected. + + + This does NOT add anything to the batch - it only creates the IDbCommand and + does NOT cause the batch to execute... + + + + + + Get a non-batchable an to use for inserting / deleting / updating. + Must be explicitly released by CloseCommand() + + The to convert to an . + The of the command. + The SqlTypes of parameters + in . + + An that is ready to have the parameter values set + and then executed. + + + + + Close a opened using PrepareCommand() + + The to ensure is closed. + The to ensure is closed. + + + + Close a opened using + + The to ensure is closed. + + + + Get a batchable to use for inserting / deleting / updating + (might be called many times before a single call to ExecuteBatch() + + + After setting parameters, call AddToBatch() - do not execute the statement + explicitly. + + The to convert to an . + The of the command. + The SqlTypes of parameters + in . + + + + + Add an insert / delete / update to the current batch (might be called multiple times + for a single PrepareBatchStatement()) + + Determines whether the number of rows affected by query is correct. + + + + Execute the batch + + + + + Close any query statements that were left lying around + + + Use this method instead of Dispose if the + can be used again. + + + + + Gets an by calling ExecuteReader on the . + + The to execute to get the . + The from the . + + The Batcher is responsible for ensuring that all of the Drivers rules for how many open + s it can have are followed. + + + + + Executes the . + + The to execute. + The number of rows affected. + + The Batcher is responsible for ensuring that all of the Drivers rules for how many open + s it can have are followed. + + + + + Must be called when an exception occurs. + + + + + + Cancel the current query statement + + + + + Gets the value indicating whether there are any open resources + managed by this batcher (IDbCommands or IDataReaders). + + + + + Gets or sets the size of the batch, this can change dynamically by + calling the session's SetBatchSize. + + The size of the batch. + + + + Initializes a new instance of the class. + + The owning this batcher. + + + + + Prepares the for execution in the database. + + + This takes care of hooking the up to an + and if one exists. It will call Prepare if the Driver + supports preparing commands. + + + + + Ensures that the Driver's rules for Multiple Open DataReaders are being followed. + + + + + + + + + + + + + + Adds the expected row count into the batch. + + The number of rows expected to be affected by the query. + + If Batching is not supported, then this is when the Command should be executed. If Batching + is supported then it should hold of on executing the batch until explicitly told to. + + + + + A flag to indicate if Disose() has been called. + + + + + Finalizer that ensures the object is correctly disposed of. + + + + + Takes care of freeing the managed and unmanaged resources that + this class is responsible for. + + + + + Takes care of freeing the managed and unmanaged resources that + this class is responsible for. + + Indicates if this BatcherImpl is being Disposed of or Finalized. + + If this BatcherImpl is being Finalized (isDisposing==false) then make sure not + to call any methods that could potentially bring this BatcherImpl back to life. + + + + + Gets the current that is contained for this Batch + + The current . + + + + Gets or sets the size of the batch, this can change dynamically by + calling the session's SetBatchSize. + + The size of the batch. + + + + Gets the the Batcher was + created in. + + + The the Batcher was + created in. + + + + + Gets the for this batcher. + + + + Implementation of ColumnNameCache. + + + + Manages the database connection and transaction for an . + + + This class corresponds to ConnectionManager and JDBCContext in Hibernate, + combined. + + + + The batcher managed by this ConnectionManager. + + + + Expected row count. Valid only for batchable expectations. + + + + Factory for instances. + + + + Provide the class of according to the configuration + and the capabilities of the driver. + + + By default, .Net doesn't have any batching capabilities, drivers that does have + batching support. + The BatcherFactory trough session-factory configuration section. + This interface was added in NHibernate for backdraw compatibility to have the ability + to specify a default for a specific . + + + + + An implementation of the + interface that does no batching. + + + + + Initializes a new instance of the class. + + The for this batcher. + + + + + Executes the current and compares the row Count + to the expectedRowCount. + + + The expected number of rows affected by the query. A value of less than 0 + indicates that the number of rows to expect is unknown or should not be a factor. + + + Thrown when there is an expected number of rows to be affected and the + actual number of rows is different. + + + + + This Batcher implementation does not support batching so this is a no-op call. The + actual execution of the is run in the AddToBatch + method. + + + + + + A BatcherFactory implementation which constructs Batcher instances + that do not perform batch operations. + + + + + Summary description for OracleDataClientBatchingBatcher. + By Tomer Avissar + + + + + A ResultSet delegate, responsible for locally caching the columnName-to-columnIndex + resolution that has been found to be inefficient in a few vendor's drivers (i.e., Oracle + and Postgres). + + + + + + Summary description for SqlClientBatchingBatcher. + + + + + Expose the batch functionality in ADO.Net 2.0 + Microsoft in its wisdom decided to make my life hard and mark it internal. + Through the use of Reflection and some delegates magic, I opened up the functionality. + + Observable performance benefits are 50%+ when used, so it is really worth it. + + + + + Append a command to the batch + + + + + + This is required because SqlClient.SqlCommandSet will throw if + the command has no parameters. + + + + + + Executes the batch + + + This seems to be returning the total number of affected rows in all queries + + + + + Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. + + 2 + + + + Return the batch command to be executed + + + + + The number of commands batched in this instance + + + + + Any exception that occurs in the O-R persistence layer. + + + Exceptions that occur in the database layer are left as native exceptions. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The message that describes the error. + + + + Initializes a new instance of the class. + + + The exception that is the cause of the current exception. If the innerException parameter + is not a null reference, the current exception is raised in a catch block that handles + the inner exception. + + + + + Initializes a new instance of the class. + + The message that describes the error. + + The exception that is the cause of the current exception. If the innerException parameter + is not a null reference, the current exception is raised in a catch block that handles + the inner exception. + + + + + Initializes a new instance of the class + with serialized data. + + + The that holds the serialized object + data about the exception being thrown. + + + The that contains contextual information about the source or destination. + + + + + CodeDOM-based bytecode provider. + + + + + Retrieve the delegate for this provider + capable of generating reflection optimization components. + + The class to be reflected upon. + All property getters to be accessed via reflection. + All property setters to be accessed via reflection. + The reflection optimization delegate. + + + + The specific factory for this provider capable of + generating run-time proxies for lazy-loading purposes. + + + + + ctor + + The target class + Array of setters + Array of getters + + + + Set up the compiler options + + + + + Add an assembly to the list of ReferencedAssemblies + required to build the class + + + + + + Build the generated code + + Generated code + An instance of the generated class + + + + Check if the property is public + + + If IsPublic==true I can directly set the property + If IsPublic==false I need to use the setter/getter + + + + + + + Generate the required code + + C# code + + + + Represents optimized entity property access. + + + + + Factory that generate object based on IReflectionOptimizer needed to replace the use + of reflection. + + + Used in and + + + + + + Generate the IReflectionOptimizer object + + The target class + Array of setters + Array of getters + if the generation fails + + + + Represents reflection optimization for a particular class. + + + + + Represents optimized entity instantiation. + + + + + Perform instantiation of an instance of the underlying class. + + The new instance. + + + + Class constructor. + + + + + Generates a dynamic method which creates a new instance of + when invoked. + + + + + Generates a dynamic method on the given type. + + + + + Generates a dynamic method on the given type. + + + + + + An interface for factories of proxy factory instances. + + + Currently used to abstract from the tupizer even if... + + + + + Build a proxy factory specifically for handling runtime + lazy loading. + + The lazy-load proxy factory. + + + + Emits an ldc.i4 opcode using the fastest available opcode choice. + + + + + Emits IL to unbox a value type and if null, create a new instance of the value type. + + + This does not work if the value type doesn't have a default constructor - we delegate + that to the ISetter. + + + + + Defines a new delegate type. + + + + + A implementation that returns + , disabling reflection optimization. + + + + + A cached instance of a persistent class + + + + + An item of cached data, timestamped with the time it was cached, when it was locked, + when it was unlocked + + + + + Caches data that is sometimes updated while maintaining the semantics of + "read committed" isolation level. If the database is set to "repeatable + read", this concurrency strategy almost maintains the semantics. + Repeatable read isolation is compromised in the case of concurrent writes. + This is an "asynchronous" concurrency strategy. + + + If this strategy is used in a cluster, the underlying cache implementation + must support distributed hard locks (which are held only momentarily). This + strategy also assumes that the underlying cache implementation does not do + asynchronous replication and that state has been fully replicated as soon + as the lock is released. + for a faster algorithm + + + + + + Implementors manage transactional access to cached data. + + + + Transactions pass in a timestamp indicating transaction start time. + + + When used to cache entities and collections the key is the identifier of the + entity/collection and the value should be set to the + for an entity and the results of + for a collection. + + + + + + Attempt to retrieve an object from the Cache + + The key (id) of the object to get out of the Cache. + A timestamp prior to the transaction start time + The cached object or + + + + + Attempt to cache an object, after loading from the database + + The key (id) of the object to put in the Cache. + The value + A timestamp prior to the transaction start time + the version number of the object we are putting + a Comparer to be used to compare version numbers + indicates that the cache should avoid a put if the item is already cached + if the object was successfully cached + + + + + We are going to attempt to update/delete the keyed object + + The key + + + This method is used by "asynchronous" concurrency strategies. + + + + Called after an item has become stale (before the transaction completes). + + + + This method is used by "synchronous" concurrency strategies. + + + + Called after an item has been updated (before the transaction completes), + instead of calling Evict(). + + + + + + This method is used by "synchronous" concurrency strategies. + + + + Called after an item has been inserted (before the transaction completes), instead of calling Evict(). + + + + + This method is used by "synchronous" concurrency strategies. + + + + Called when we have finished the attempted update/delete (which may or + may not have been successful), after transaction completion. + + The key + The soft lock + + This method is used by "asynchronous" concurrency strategies. + + + + Called after an item has been updated (after the transaction completes), + instead of calling Release(). + + + + + + This method is used by "asynchronous" concurrency strategies. + + + + Called after an item has been inserted (after the transaction completes), instead of calling release(). + + + + + This method is used by "asynchronous" concurrency strategies. + + + + Evict an item from the cache immediately (without regard for transaction isolation). + + + + + + + Evict all items from the cache immediately. + + + + + + Clean up all resources. + + + + + + Gets the cache region name. + + + + + Gets or sets the for this strategy to use. + + The for this strategy to use. + + + + Generate an id for a new lock. Uniqueness per cache instance is very + desirable but not absolutely critical. Must be called from one of the + synchronized methods of this class. + + + + + + Do not return an item whose timestamp is later than the current + transaction timestamp. (Otherwise we might compromise repeatable + read unnecessarily.) Do not return an item which is soft-locked. + Always go straight to the database instead. + + + Note that since reading an item from that cache does not actually + go to the database, it is possible to see a kind of phantom read + due to the underlying row being updated after we have read it + from the cache. This would not be possible in a lock-based + implementation of repeatable read isolation. It is also possible + to overwrite changes made and committed by another transaction + after the current transaction read the item from the cache. This + problem would be caught by the update-time version-checking, if + the data is versioned or timestamped. + + + + + Stop any other transactions reading or writing this item to/from + the cache. Send them straight to the database instead. (The lock + does time out eventually.) This implementation tracks concurrent + locks by transactions which simultaneously attempt to write to an + item. + + + + + Do not add an item to the cache unless the current transaction + timestamp is later than the timestamp at which the item was + invalidated. (Otherwise, a stale item might be re-added if the + database is operating in repeatable read isolation mode.) + + Whether the item was actually put into the cache + + + + decrement a lock and put it back in the cache + + + + + Re-cache the updated state, if and only if there there are + no other concurrent soft locks. Release our lock. + + + + + Is the client's lock commensurate with the item in the cache? + If it is not, we know that the cache expired the original + lock. + + + + + Gets the cache region name. + + + + + Lock the item + + + + + Is this item visible to the timestamped transaction? + + + + + + + Don't overwite already cached items + + + + + + + + + The timestamp on the cached data + + + + + The actual cached data + + + + + Not a lock! + + + + + Represents any exception from an . + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The message that describes the error. + + + + Initializes a new instance of the class. + + + The exception that is the cause of the current exception. If the innerException parameter + is not a null reference, the current exception is raised in a catch block that handles + the inner exception. + + + + + Initializes a new instance of the class. + + The message that describes the error. + + The exception that is the cause of the current exception. If the innerException parameter + is not a null reference, the current exception is raised in a catch block that handles + the inner exception. + + + + + Initializes a new instance of the class + with serialized data. + + + The that holds the serialized object + data about the exception being thrown. + + + The that contains contextual information about the source or destination. + + + + + Factory class for creating an . + + + + + No providers implement transactional caching currently, + it was ported from Hibernate just for the sake of completeness. + + + + + Creates an from the parameters. + + The name of the strategy that should use for the class. + The name of the class the strategy is being created for. + if the object being stored in the cache is mutable. + Used to retrieve the global cache region prefix. + Properties the cache provider can use to configure the cache. + An to use for this object in the . + + + + Allows multiple entity classes / collection roles to be + stored in the same cache region. Also allows for composite + keys which do not properly implement equals()/hashCode(). + + + + + Construct a new key for a collection or entity instance. + Note that an entity name should always be the root entity + name, not a subclass entity name. + + The identifier associated with the cached data + The Hibernate type mapping + The entity or collection-role name. + The entiyt mode of the originating session + The session factory for which we are caching + + + + A soft lock which supports concurrent locking, + timestamped with the time it was released + + + This class was named Lock in H2.1 + + + + + Marker interface, denoting a client-visible "soft lock" on a cached item. + + + + + Increment the lock, setting the + new lock timeout + + + + + Decrement the lock, setting the unlock + timestamp if now unlocked + + + + + + Can the timestamped transaction re-cache this + locked item now? + + + + + locks are not returned to the client! + + + + + Was this lock held concurrently by multiple + transactions? + + + + + Yes, this is a lock + + + + + A simple -based cache + + + + + Implementors define a caching algorithm. + + + + + All implementations must be threadsafe. + + + The key is the identifier of the object that is being cached and the + value is a . + + + + + + Get the object from the Cache + + + + + + + + + + + + + + Remove an item from the Cache. + + The Key of the Item in the Cache to remove. + + + + + Clear the Cache + + + + + + Clean up. + + + + + + If this is a clustered cache, lock the item + + The Key of the Item in the Cache to lock. + + + + + If this is a clustered cache, unlock the item + + The Key of the Item in the Cache to unlock. + + + + + Generate a timestamp + + + + + + Get a reasonable "lock timeout" + + + + + Gets the name of the cache region + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Cache Provider plugin for NHibernate that is configured by using + cache.provider_class="NHibernate.Cache.HashtableCacheProvider" + + + + + Support for pluggable caches + + + + + Configure the cache + + the name of the cache region + configuration settings + + + + + generate a timestamp + + + + + + Callback to perform any necessary initialization of the underlying cache implementation + during ISessionFactory construction. + + current configuration settings + + + + Callback to perform any necessary cleanup of the underlying cache implementation + during . + + + + + Contract for sources of optimistically lockable data sent to the second level cache. + + + Note currently EntityPersisters are + the only viable source. + + + + + Does this source represent versioned (i.e., and thus optimistically lockable) data? + + True if this source represents versioned data; false otherwise. + + + Get the comparator used to compare two different version values together. + An appropriate comparator. + + + + Defines the contract for caches capable of storing query results. These + caches should only concern themselves with storing the matching result ids. + The transactional semantics are necessarily less strict than the semantics + of an item cache. + + + + + Defines a factory for query cache instances. These factories are responsible for + creating individual QueryCache instances. + + + + + A cache provider placeholder used when caching is disabled. + + + + + Configure the cache + + the name of the cache region + configuration settings + + + + + Generate a timestamp + + + + + Callback to perform any necessary initialization of the underlying cache implementation during SessionFactory + construction. + + current configuration settings. + + + + Callback to perform any necessary cleanup of the underlying cache implementation during SessionFactory.close(). + + + + + Caches data that is sometimes updated without ever locking the cache. + If concurrent access to an item is possible, this concurrency strategy + makes no guarantee that the item returned from the cache is the latest + version available in the database. Configure your cache timeout accordingly! + This is an "asynchronous" concurrency strategy. + for a much stricter algorithm + + + + + Get the most recent version, if available. + + + + + Add an item to the cache + + + + + Do nothing + + + + + Invalidate the item + + + + + Invalidate the item + + + + + Do nothing + + + + + Invalidate the item (again, for safety). + + + + + Invalidate the item (again, for safety). + + + + + Do nothing + + + + + Gets the cache region name. + + + + + Initializes a new instance of the class. + + the sesion factory for this query key, required to get the identifiers of entities that are used as values. + The query string. + The query parameters. + The filters. + + + + Caches data that is never updated + + + + + Unsupported! + + + + + Unsupported! + + + + + Unsupported! + + + + + Do nothing. + + + + + Do nothing. + + + + + Do nothing. + + + + + Unsupported! + + + + + Gets the cache region name. + + + + + The standard implementation of the Hibernate + interface. This implementation is very good at recognizing stale query + results and re-running queries when it detects this condition, recaching + the new results. + + + + + Standard Hibernate implementation of the IQueryCacheFactory interface. Returns + instances of . + + + + + Generates increasing identifiers (in a single application domain only). + + + Not valid across multiple application domains. Identifiers are not necessarily + strictly increasing, but usually are. + + + + + + + + + + + + + + Tracks the timestamps of the most recent updates to particular tables. It is + important that the cache timeout of the underlying cache implementation be set + to a higher value than the timeouts of any of the query caches. In fact, we + recommend that the the underlying cache not be configured for expiry at all. + Note, in particular, that an LRU cache expiry policy is never appropriate. + + + + + + + + Helper to parse hibernate-configuration XmlNode. + + + + + The XML node name for hibernate configuration section in the App.config/Web.config and + for the hibernate.cfg.xml . + + + + The XML Namespace for the nhibernate-configuration + + + XPath expression for bytecode-provider property. + + + XPath expression for reflection-optimizer property. + + + XPath expression for session-factory whole node. + + + XPath expression for session-factory.property nodes + + + XPath expression for session-factory.mapping nodes + + + XPath expression for session-factory.class-cache nodes + + + XPath expression for session-factory.collection-cache nodes + + + XPath expression for session-factory.event nodes + + + XPath expression for session-factory.listener nodes + + + + Convert a string to . + + The string that represent . + + The converted to . + for invalid values. + + + See for allowed values. + + + + + Convert a string to . + + The string that represent . + + The converted to . + + If the values is invalid. + + See for allowed values. + + + + + Convert a string to . + + The string that represent . + + The converted to . + + If the values is invalid. + + See for allowed values. + + + + + Convert a string to . + + The string that represent . + + The converted to . + + If the values is invalid. + + See for allowed values. + + + + + Values for class-cache and collection-cache strategy. + + + + Xml value: read-only + + + Xml value: read-write + + + Xml value: nonstrict-read-write + + + Xml value: transactional + + + + Values for class-cache include. + + Not implemented in Cache. + + + Xml value: all + + + Xml value: non-lazy + + + + Configuration parsed values for a class-cache XML node. + + + + + Initializes a new instance of the class. + + The class full name. + Cache strategy. + When is null or empty. + + + + Initializes a new instance of the class. + + The class full name. + Cache strategy. + Values for class-cache include. + When is null or empty. + + + + Initializes a new instance of the class. + + The class full name. + Cache strategy. + The cache region. + When is null or empty. + + + + Initializes a new instance of the class. + + The class full name. + Cache strategy. + Values for class-cache include. + The cache region. + When is null or empty. + + + + The class full name. + + + + + The cache region. + + If null or empty the is used during configuration. + + + + Cache strategy. + + + + + class-cache include. + + + Not implemented in Cache. + Defaul value . + + + + + Configuration parsed values for a collection-cache XML node. + + + + + Initializes a new instance of the class. + + The cache role. + Cache strategy. + When is null or empty. + + + + Initializes a new instance of the class. + + The cache role. + Cache strategy. + The cache region. + When is null or empty. + + + + The role. + + + + + The cache region. + + If null or empty the is used during configuration. + + + + Cache strategy. + + + + + Configuration parsed values for a event XML node. + + + + + Initializes a new instance of the class. + + The listener. + The type. + + + + The default type of listeners. + + + + + Listeners for this event. + + + + + Values for bytecode-provider system property. + + + + Xml value: codedom + + + Xml value: lcg + + + Xml value: null + + + + Configuration parsed values for hibernate-configuration section. + + + + + Initializes a new instance of the class. + + The XML reader to parse. + + The nhibernate-configuration.xsd is applied to the XML. + + When nhibernate-configuration.xsd can't be applied. + + + + Value for bytecode-provider system property. + + Default value . + + + + Value for reflection-optimizer system property. + + Default value true. + + + + The if the session-factory exists in hibernate-configuration; + Otherwise null. + + + + + Configuration parsed values for a listener XML node + + + + + Initializes a new instance of the class. + + The class full name. + When is null or empty. + + + + Initializes a new instance of the class. + + The class full name. + The listener type. + When is null or empty. + + + + The class full name. + + + + + The listener type. + + Default value mean that the value is ignored. + + + + Configuration parsed values for a mapping XML node + + + There are 3 possible combinations of mapping attributes + 1 - resource and assembly: NHibernate will read the mapping resource from the specified assembly + 2 - file only: NHibernate will read the mapping from the file. + 3 - assembly only: NHibernate will find all the resources ending in hbm.xml from the assembly. + + + + + Initializes a new instance of the class. + + Mapped file. + When is null or empty. + + + + Initializes a new instance of the class. + + The assembly name. + The mapped embedded resource. + When is null or empty. + + + + Configuration parsed values for a session-factory XML node. + + + + + Initializes a new instance of the class. + + The session factory name. Null or empty string are allowed. + + + + The session factory name. + + + + + Session factory propeties bag. + + + + + Session factory mapping configuration. + + + + + Session factory class-cache configurations. + + + + + Session factory collection-cache configurations. + + + + + Session factory event configurations. + + + + + Session factory listener configurations. + + + + + Responsible for checking that a resource name matches the default pattern of "*.hbm.xml". This is the + default filter for . + + + + + Responsible for determining whether an embedded resource should be parsed for HBM XML data while + iterating through an . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A base class for HBM schema classes that provides helper methods. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Responsible for converting a of HBM XML into an instance of + . + + + + + Responsible for building a list of objects from a range of acceptable + sources. + + + + + Calls the greedy constructor, passing it new instances of and + . + + + + Adds any embedded resource streams which pass the . + An assembly containing embedded mapping documents. + A custom filter. + + + Adds any embedded resource streams which pass the default filter. + An assembly containing embedded mapping documents. + + + + Responsible for converting a of HBM XML into an instance of + . + + Uses an to deserialize HBM. + + + + Converts a partial class name into a fully qualified one + + + + + + + + Attempts to find a type by its full name. Throws a + using the provided in case of failure. + + name of the class to find + Error message to use for + the in case of failure. Should contain + the {0} formatting placeholder. + A instance. + + Thrown when there is an error loading the class. + + + + + Similar to , but handles short class names + by calling . + + + + + + + + + Called for all collections. parameter + was added in NH to allow for reflection related to generic types. + + + + + Called for arrays and primitive arrays + + + + + Called for Maps + + + + + + + + Called for all collections + + + + + Extracts the names of classes mapped in a given file, + and the names of the classes they extend. + + + + + Returns a collection of containing + information about all classes in this stream. + + A validated representing + a mapping file. + + + + Holds information about mapped classes found in the hbm.xml files. + + + + + Allows the application to specify properties and mapping documents to be used when creating + a . + + + + Usually an application will create a single , build a single instance + of , and then instantiate objects in threads + servicing client requests. + + + The is meant only as an initialization-time object. + is immutable and does not retain any association back to the + + + + + The XML Namespace for the nhibernate-mapping + + + Default name for hibernate configuration file. + + + + Clear the internal state of the object. + + + + + Create a new Configuration object. + + + + + Get the mapping for a particular class + + + + Get the mapping for a particular entity + An entity name. + the entity mapping information + + + + Get the mapping for a particular collection role + + a collection role + + + + + Read mappings from a particular XML file. This method is equivalent + to . + + + + + + + Read mappings from a particular XML file. + + a path to a file + This configuration object. + + + + Read mappings from a . This method is equivalent to + . + + an XML string + The name to use in error reporting. May be . + This configuration object. + + + + Read mappings from a . + + an XML string + This configuration object. + + + + Read mappings from a URL. + + a URL + This configuration object. + + + + Read mappings from a URL. + + a to read the mappings from. + This configuration object. + + + + Read mappings from an . + + A loaded that contains the mappings. + The name of the document, for error reporting purposes. + This configuration object. + + + + Takes the validated XmlDocument and has the Binder do its work of + creating Mapping objects from the Mapping Xml. + + The NamedXmlDocument that contains the validated mapping XML file. + + + + Create a new to add classes and collection + mappings to. + + + + + Read mappings from a . + + The stream containing XML + This Configuration object. + + The passed in through the parameter + is not guaranteed to be cleaned up by this method. It is the caller's responsiblity to + ensure that is properly handled when this method + completes. + + + + + Read mappings from a . + + The stream containing XML + The name of the stream to use in error reporting. May be . + This Configuration object. + + The passed in through the parameter + is not guaranteed to be cleaned up by this method. It is the caller's responsiblity to + ensure that is properly handled when this method + completes. + + + + + Adds the mappings in the resource of the assembly. + + The path to the resource file in the assembly. + The assembly that contains the resource file. + This configuration object. + + + + Read a mapping from an embedded resource, using a convention. + + The type to map. + This configuration object. + + The convention is for class Foo.Bar.Foo to be mapped by + the resource named Foo.Bar.Foo.hbm.xml, embedded in + the class' assembly. If the mappings and classes are defined + in different assemblies or don't follow the naming convention, + this method cannot be used. + + + + + Adds all of the assembly's embedded resources whose names end with .hbm.xml. + + The name of the assembly to load. + This configuration object. + + The assembly must be loadable using . If this + condition is not satisfied, load the assembly manually and call + instead. + + + + + Adds all of the assembly's embedded resources whose names end with .hbm.xml. + + The assembly. + This configuration object. + + + + Read all mapping documents from a directory tree. Assume that any + file named *.hbm.xml is a mapping document. + + a directory + + + + Generate DDL for droping tables + + + + + + Generate DDL for creating tables + + + + + + This method may be called many times!! + + + + + Instantiate a new , using the properties and mappings in this + configuration. The will be immutable, so changes made to the + configuration after building the will not affect it. + + An instance. + + + + Set the default assembly to use for the mappings added to the configuration + afterwards. + + The default assembly name. + This configuration instance. + + This setting can be overridden for a mapping file by setting default-assembly + attribute of <hibernate-mapping> element. + + + + + Set the default namespace to use for the mappings added to the configuration + afterwards. + + The default namespace. + This configuration instance. + + This setting can be overridden for a mapping file by setting default-namespace + attribute of <hibernate-mapping> element. + + + + + Sets the default interceptor for use by all sessions. + + The default interceptor. + This configuration instance. + + + + Specify a completely new set of properties + + + + + Adds an of configuration properties. The + Key is the name of the Property and the Value is the + value of the Property. + + An of configuration properties. + + This object. + + + + + Sets the value of the configuration property. + + The name of the property. + The value of the property. + + This configuration object. + + + + + Gets the value of the configuration property. + + The name of the property. + The configured value of the property, or if the property was not specified. + + + + Configure NHibernate using the <hibernate-configuration> section + from the application config file, if found, or the file hibernate.cfg.xml if the + <hibernate-configuration> section not include the session-factory configuration. + + A configuration object initialized with the file. + + To configure NHibernate explicitly using hibernate.cfg.xml, appling merge/override + of the application configuration file, use this code: + + configuration.Configure("path/to/hibernate.cfg.xml"); + + + + + + Configure NHibernate using the file specified. + + The location of the XML file to use to configure NHibernate. + A Configuration object initialized with the file. + + Calling Configure(string) will override/merge the values set in app.config or web.config + + + + + Configure NHibernate using a resource contained in an Assembly. + + The that contains the resource. + The name of the manifest resource being requested. + A Configuration object initialized from the manifest resource. + + Calling Configure(Assembly, string) will overwrite the values set in app.config or web.config + + + + + Configure NHibernate using the specified XmlReader. + + The that contains the Xml to configure NHibernate. + A Configuration object initialized with the file. + + Calling Configure(XmlReader) will overwrite the values set in app.config or web.config + + + + + Set up a cache for an entity class + + + + + Set up a cache for a collection role + + + + + Create an object-oriented view of the configuration properties + + A object initialized from the settings properties. + + + + Set a custom naming strategy + + the NamingStrategy to set + + + + + Load and validate the mappings in the against + the nhibernate-mapping-2.2 schema, without adding them to the configuration. + + + This method is made public to be usable from the unit tests. It is not intended + to be called by end users. + + The XmlReader that contains the mapping. + The name of the document, for error reporting purposes. + NamedXmlDocument containing the validated XmlDocument built from the XmlReader. + + + + Adds the Mappings in the after validating it + against the nhibernate-mapping-2.2 schema. + + The XmlReader that contains the mapping. + This Configuration object. + + + + Adds the Mappings in the after validating it + against the nhibernate-mapping-2.2 schema. + + The XmlReader that contains the mapping. + The name of the document to use for error reporting. May be . + This Configuration object. + + + + Set or clear listener for a given . + + The . + The array of AssemblyQualifiedName of each listener for . + + must implements the interface related with . + All listeners of the given will be cleared if the + is null or empty. + + + when an element of have an invalid value or cant be instantiated. + + + + + Set or clear listener for a given . + + The . + The listener for or null to clear. + must implements the interface related with . + + + + + Set or clear listeners for a given . + + The . + The listener for or null to clear. + Listners of must implements one of the interface of event listenesr. + + + + + Generate DDL for altering tables + + + + + + The class mappings + + + + + The collection mappings + + + + + The table mappings + + + + + The named queries + + + + + Retrieve the user-supplied delegate to handle non-existent entity scenarios. + + + Specify a user-supplied delegate to be used to handle scenarios where an entity could not be + located by specified id. This is mainly intended for EJB3 implementations to be able to + control how proxy initialization errors should be handled... + + + + + Gets or sets the to use. + + The to use. + + + + Gets or sets the that contains the configuration + properties and their values. + + + The that contains the configuration + properties and their values. + + + + + Get the query language imports + + + + + + The named SQL queries + + + + + Naming strategy for tables and columns + + + + + Defines operations common to "compiled" mappings (ie. SessionFactory) and + "uncompiled" mappings (ie Configuration that are used by implementors of IType + + + + + Summary description for ConfigurationSectionHandler. + + + + + The default + + See for a better alternative + + + + A set of rules for determining the physical column and table names given the information in the mapping + document. May be used to implement project-scoped naming standards for database objects. + + + + + Return a table name for an entity class + + the fully-qualified class name + a table name + + + + Return a column name for a property path expression + + a property path + a column name + + + + Alter the table name given in the mapping document + + a table name + a table name + + + + Alter the column name given in the mapping document + + a column name + a column name + + + + Return a table name for a collection + + the fully-qualified name of the owning entity class + a property path + a table name + + + + Return the logical column name used to refer to a column in the metadata + (like index, unique constraints etc) + A full bijection is required between logicalNames and physical ones + logicalName have to be case insersitively unique for a given table + + given column name if any + property name of this column + + + + The singleton instance + + + + + Return the unqualified class name + + + + + + + Return the unqualified property name + + + + + + + Return the argument + + + + + + + Return the argument + + + + + + + Return the unqualified property name + + + + + + + + Provides access to configuration information. + + + NHibernate has two property scopes: + + + Factory-level properties may be passed to the when it is + instantiated. Each instance might have different property values. If no properties are + specified, the factory gets them from Environment + + + System-level properties are shared by all factory instances and are always determined + by the properties + + + In NHibernate, <hibernate-configuration> section in the application configuration file + corresponds to Java system-level properties; <session-factory> + section is the session-factory-level configuration. + + It is possible to use the applicatoin configuration file (App.config) together with the NHibernate + configuration file (hibernate.cfg.xml) at the same time. + Properties in hibernate.cfg.xml override/merge properties in applicatoin configuration file where same + property is found. For others configuration a merge is applied. + + + + + Used to find the .Net 2.0 named connection string + + + + A default database schema (owner) name to use for unqualified tablenames + + + A default database catalog name to use for unqualified tablenames + + + Should named queries be checked during startup (the default is enabled). + Mainly intended for test environments. + + + Enable statistics collection + + + + Issue warnings to user when any obsolete property names are used. + + + + + + + NHibernate version (informational). + + + + + Gets a copy of the configuration found in <hibernate-configuration> section + of app.config/web.config. + + + This is the replacement for hibernate.properties + + + + + The bytecode provider to use. + + + This property is read from the <nhibernate> section + of the application configuration file by default. Since it is not + always convenient to configure NHibernate through the application + configuration file, it is also possible to set the property value + manually. This should only be done before a configuration object + is created, otherwise the change may not take effect. + + + + + Whether to enable the use of reflection optimizer + + + This property is read from the <nhibernate> section + of the application configuration file by default. Since it is not + always convenient to configure NHibernate through the application + configuration file, it is also possible to set the property value + manually. This should only be done before a configuration object + is created, otherwise the change may not take effect. + + + + + Represents a mapping queued for delayed processing to await + processing of an extends entity upon which it depends. + + + + + An exception that occurs at configuration time, rather than runtime, as a result of + something screwy in the hibernate.cfg.xml. + + + + + An exception that usually occurs at configuration time, rather than runtime, as a result of + something screwy in the O-R mappings + + + + + Initializes a new instance of the class. + + The message that describes the error. + + + + Initializes a new instance of the class. + + + The exception that is the cause of the current exception. If the innerException parameter + is not a null reference, the current exception is raised in a catch block that handles + the inner exception. + + + + + Initializes a new instance of the class. + + The message that describes the error. + + The exception that is the cause of the current exception. If the innerException parameter + is not a null reference, the current exception is raised in a catch block that handles + the inner exception. + + + + + Initializes a new instance of the class + with serialized data. + + + The that holds the serialized object + data about the exception being thrown. + + + The that contains contextual information about the source or destination. + + + + + Initializes a new instance of the class. + + Default message is used. + + + + Initializes a new instance of the class. + + + The exception that is the cause of the current exception. If the innerException parameter + is not a null reference, the current exception is raised in a catch block that handles + the inner exception. + + + + + Initializes a new instance of the class. + + The message that describes the error. + + + + Initializes a new instance of the class. + + The message that describes the error. + + The exception that is the cause of the current exception. If the innerException parameter + is not a null reference, the current exception is raised in a catch block that handles + the inner exception. + + + + + Initializes a new instance of the class + with serialized data. + + + The that holds the serialized object + data about the exception being thrown. + + + The that contains contextual information about the source or destination. + + + + + Summary description for ImprovedNamingStrategy. + + + + + The singleton instance + + + + + Return the unqualified class name, mixed case converted to underscores + + + + + + + Return the full property path with underscore seperators, mixed case converted to underscores + + + + + + + Convert mixed case to underscores + + + + + + + Convert mixed case to underscores + + + + + + + Return the full property path prefixed by the unqualified class name, with underscore seperators, mixed case converted to underscores + + + + + + + + A collection of mappings from classes and collections to relational database tables. + + Represents a single <hibernate-mapping> element. + + + + Binding table between the logical column name and the name out of the naming strategy + for each table. + According that when the column name is not set, the property name is considered as such + This means that while theorically possible through the naming strategy contract, it is + forbidden to have 2 real columns having the same logical name + + + + + Binding between logical table name and physical one (ie after the naming strategy has been applied) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Adds an import to allow for the full class name Namespace.Entity + to be referenced as Entity or some other name in HQL. + + The name of the type that is being renamed. + The new name to use in HQL for the type. + Thrown when the rename already identifies another type. + + + + + + + + + The default namespace for persistent classes + + + + + The default assembly for persistent classes + + + + + + + + + + + Gets or sets a boolean indicating if the Fully Qualified Type name should + automattically have an import added as the class name. + + if the class name should be used as an import. + + Auto-import is used to shorten the string used to refer to types to just their + unqualified name. So if the type MyAssembly.MyNamespace.MyClass, MyAssembly has + auto-import="false" then all use of it in HQL would need to be the fully qualified + version MyAssembly.MyNamespace.MyClass. If auto-import="true", the type could + be referred to in HQL as just MyClass. + + + + + Queues mapping files according to their dependency order. + + + + + Adds the specified document to the queue. + + + + + Gets a that can now be processed (i.e. + that doesn't depend on classes not yet processed). + + + + + + Checks that no unprocessed documents remain in the queue. + + + + + Holds information about mapped classes found in an embedded resource + + + + + Gets the names of all classes outside this resource + needed by the classes in this resource. + + An of + + + + Settings that affect the behavior of NHibernate at runtime. + + + + + Reads configuration properties and configures a instance. + + + + + Provides callbacks from the to the persistent object. Persistent classes may + implement this interface but they are not required to. + + + + , , and are intended to be used + to cascade saves and deletions of dependent objects. This is an alternative to declaring cascaded + operations in the mapping file. + + + may be used to initialize transient properties of the object from its persistent + state. It may not be used to load dependent objects since the interface + may not be invoked from inside this method. + + + A further intended usage of , , and + is to store a reference to the for later use. + + + If , , or return + , the operation is silently vetoed. If a + is thrown, the operation is vetoed and the exception is passed back to the application. + + + Note that is called after an identifier is assigned to the object, except when + identity key generation is used. + + + + + + Called when an entity is saved + + The session + If we should veto the save + + + + Called when an entity is passed to . + + The session + A value indicating whether the operation + should be vetoed or allowed to proceed. + + This method is not called every time the object's state is + persisted during a flush. + + + + + Called when an entity is deleted + + The session + A value indicating whether the operation + should be vetoed or allowed to proceed. + + + + Called after an entity is loaded. + + + It is illegal to access the from inside this method.. + However, the object may keep a reference to the session for later use + + The session + The identifier + + + + Veto the action + + + + + Accept the action + + + + + Implemented by persistent classes with invariants that must be checked before inserting + into or updating the database + + + + + Validate the state of the object before persisting it. If a violation occurs, + throw a . This method must not change the state of the object + by side-effect. + + + + + Thrown from when an invariant was violated. Some applications + might subclass this exception in order to provide more information about the violation + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The message that describes the error. + + + + Initializes a new instance of the class. + + + The exception that is the cause of the current exception. If the innerException parameter + is not a null reference, the current exception is raised in a catch block that handles + the inner exception. + + + + + Initializes a new instance of the class. + + The message that describes the error. + + The exception that is the cause of the current exception. If the innerException parameter + is not a null reference, the current exception is raised in a catch block that handles + the inner exception. + + + + + Initializes a new instance of the class + with serialized data. + + + The that holds the serialized object + data about the exception being thrown. + + + The that contains contextual information about the source or destination. + + + + + An unordered, unkeyed collection that can contain the same element + multiple times. The .NET collections API, has no Bag. + The interface closely resembles bag semantics, + however NHibernate for .NET 1.1 used so + is used to ensure the easiest transition + to generics. + + The type of the element the bag should hold. + The underlying collection used is an + + + + Base class for implementing . + + + + + + Persistent collections are treated as value objects by NHibernate. + ie. they have no independent existence beyond the object holding + a reference to them. Unlike instances of entity classes, they are + automatically deleted when unreferenced and automatically become + persistent when held by a persistent object. Collections can be + passed between different objects (change "roles") and this might + cause their elements to move from one database table to another. + + + NHibernate "wraps" a collection in an instance of + . This mechanism is designed + to support tracking of changes to the collection's persistent + state and lazy instantiation of collection elements. The downside + is that only certain abstract collection types are supported and + any extra semantics are lost. + + + Applications should never use classes in this namespace + directly, unless extending the "framework" here. + + + Changes to structure of the collection are recorded by the + collection calling back to the session. Changes to mutable + elements (ie. composite elements) are discovered by cloning their + state when the collection is initialized and comparing at flush + time. + + + + + + Return the user-visible collection (or array) instance + + + By default, the NHibernate wrapper is an acceptable collection for + the end user code to work with because it is interface compatible. + An NHibernate PersistentList is an IList, an NHibernate PersistentMap is an IDictionary + and those are the types user code is expecting. + + + + + Clears out any Queued Additions. + + + After a Flush() the database is in synch with the in-memory + contents of the Collection. Since everything is in synch remove + any Queued Additions. + + + + + Called just before reading any rows from the + + + + + Called after reading all rows from the + + + This should be overridden by sub collections that use temporary collections + to store values read from the db. + + + + + Disassociate this collection from the given session. + + + true if this was currently associated with the given session + + + + Associate the collection with the given session. + + + false if the collection was already associated with the session + + + + Read the state of the collection from a disassembled cached value. + + + + + + + + Iterate all collection entries, during update of the database + + + An that gives access to all entries + in the collection. + + + + + Reads the row from the . + + + This method should be prepared to handle duplicate elements caused by fetching multiple collections, + or should be updated + to return for the collection type. + + The IDataReader that contains the value of the Identifier + The persister for this Collection. + The descriptor providing result set column names + The owner of this Collection. + The object that was contained in the row. + + + + Get the identifier of the given collection entry + + + + + Get the index of the given collection entry + + + + + Get the value of the given collection entry + + + + + Called before any elements are read into the collection, + allowing appropriate initializations to occur. + + The for this persistent collection. + + + + Does the current state exactly match the snapshot? + + The to compare the elements of the Collection. + + if the wrapped collection is different than the snapshot + of the collection or if one of the elements in the collection is + dirty. + + + + + Disassemble the collection, ready for the cache + + The for this Collection. + The contents of the persistent collection in a cacheable form. + + + + Gets a indicating if the rows for this collection + need to be recreated in the table. + + The for this Collection. + + by default since most collections can determine which rows need to be + individually updated/inserted/deleted. Currently only 's for many-to-many + need to be recreated. + + + + + Return a new snapshot of the current state of the collection + + + + + To be called internally by the session, forcing + immediate initalization. + + + This method is similar to , except that different exceptions are thrown. + + + + + Does an element exist at this entry in the collection? + + + + + Do we need to insert this element? + + + + + Do we need to update this element? + + + + + Get all the elements that need deleting + + + + + Is this the wrapper for the given underlying collection instance? + + The collection to see if this IPersistentCollection is wrapping. + + if the IPersistentCollection is wrappping the collection instance, + otherwise. + + + + + Called before inserting rows, to ensure that any surrogate keys are fully generated + + + + + + Called after inserting a row, to fetch the natively generated id + + + + + + + + Get all "orphaned" elements + + The snapshot of the collection. + The persistent class whose objects + the collection is expected to contain. + + An that contains all of the elements + that have been orphaned. + + + + + Get the snapshot value of the given collection entry + + + + + Called after initializing from cache + + + + + Clear the dirty flag, after flushing changes + to the database. + + + + + Mark the collection as dirty + + + + + The owning entity. + + + Note that the owner is only set during the flush + cycle, and when a new collection wrapper is created + while loading an entity. + + + + + Is the initialized collection empty? + + + + + Gets a indicating if the underlying collection is directly + accessable through code. + + + if we are not guaranteed that the NHibernate collection wrapper + is being used. + + + This is typically whenever a transient object that contains a collection is being + associated with an through or . + NHibernate can't guarantee that it will know about all operations that would cause NHibernate's collections + to call or . + + + + + + + + + + + + + + + + + Is the collection dirty? Note that this is only + reliable during the flush cycle, after the + collection elements are dirty checked against + the snapshot. + + + + + Called by any read-only method of the collection interface + + + + + Called by any writer method of the collection interface + + + + + Queue an addition if the peristent collection supports it + + + if the addition was queued up, if the persistent collection + doesn't support Queued Addition. + + + + + Queue additions + + + + + After reading all existing elements from the database, + add the queued elements to the underlying collection. + + The to add. + The that + is currently loading the collection. + + The default implementation is to throw an + because most collections do not support delayed addition. If the collection + does then override this method. + + + + + Clears out any Queued Additions. + + + After a Flush() the database is in synch with the in-memory + contents of the Collection. Since everything is in synch remove + any Queued Additions. + + + + + Not called by Hibernate, but used by non-NET serialization, eg. SOAP libraries. + + + + + Not called by Hibernate, but used by non-NET serialization, eg. SOAP libraries. + + + + + + Return the user-visible collection (or array) instance + + + By default, the NHibernate wrapper is an acceptable collection for + the end user code to work with because it is interface compatible. + An NHibernate PersistentList is an IList, an NHibernate PersistentMap is an IDictionary + and those are the types user code is expecting. + + + + + Called just before reading any rows from the + + + + + Called after reading all rows from the + + + This should be overridden by sub collections that use temporary collections + to store values read from the db. + + + + + Initialize the collection, if possible, wrapping any exceptions + in a runtime exception + + currently obsolete + if we cannot initialize + + + + Mark the collection as initialized. + + + + + Disassociate this collection from the given session. + + + true if this was currently associated with the given session + + + + Associate the collection with the given session. + + + false if the collection was already associated with the session + + + + Read the state of the collection from a disassembled cached value. + + + + + + + + Iterate all collection entries, during update of the database + + + + + + Reads the row from the . + + The IDataReader that contains the value of the Identifier + The persister for this Collection. + The descriptor providing result set column names + The owner of this Collection. + The object that was contained in the row. + + + + Get the index of the given collection entry + + + + + + + + Called before any elements are read into the collection, + allowing appropriate initializations to occur. + + + + + + Return a new snapshot of the current state + + The for this Collection. + + + + + Disassemble the collection, ready for the cache + + + + + + + Gets a indicating if the rows for this collection + need to be recreated in the table. + + The for this Collection. + + by default since most collections can determine which rows need to be + individually updated/inserted/deleted. Currently only 's for many-to-many + need to be recreated. + + + + + + + + + + + + To be called internally by the session, forcing + immediate initalization. + + + This method is similar to , except that different exceptions are thrown. + + + + + Does an element exist at this entry in the collection? + + + + + + + + Do we need to insert this element? + + + + + + + + + Do we need to update this element? + + + + + + + + + Get all the elements that need deleting + + + + + Is this the wrapper for the given underlying collection instance? + + + + + + + Gets the Snapshot from the current session the collection + is in. + + + + + Called before inserting rows, to ensure that any surrogate keys are fully generated + + + + + + Called after inserting a row, to fetch the natively generated id + + + + + + + + Get all "orphaned" elements + + + + + Is the initialized collection empty? + + + + + Is the collection currently connected to an open session? + + + + + Is this collection in a state that would allow us to "queue" additions? + + + + + Gets a indicating if the underlying collection is directly + accessable through code. + + + if we are not guaranteed that the NHibernate collection wrapper + is being used. + + + This is typically whenever a transient object that contains a collection is being + associated with an through or . + NHibernate can't guarantee that it will know about all operations that would cause NHibernate's collections + to call or . + + + + + + + + + + + + + + + + + + + + Initializes an instance of the + in the . + + The the bag is in. + + + + Initializes an instance of the + that wraps an existing in the . + + The the bag is in. + The to wrap. + + + + Gets a indicating if this Bag needs to be recreated + in the database. + + The for this Collection. + + if this is a one-to-many bag, if this is not + a one-to-many bag. Since a bag is an unordered, unindexed collection + that permits duplicates it is not possible to determine what has changed in a + many-to-many so it is just recreated. + + + + + Counts the number of times that the occurs + in the . + + The element to find in the list. + The to search. + The that can determine equality. + + The number of occurrences of the element in the list. + + + + + Is this the wrapper for the given underlying bag instance? + + The bag that might be wrapped. + + if the is equal to the + wrapped collection by object reference. + + + + + Is the initialized GenericBag empty? + + if the bag has a Count==0, otherwise. + + + + Implements "bag" semantics more efficiently than by adding + a synthetic identifier column to the table. + + + + The identifier is unique for all rows in the table, allowing very efficient + updates and deletes. The value of the identifier is never exposed to the + application. + + + Identifier bags may not be used for a many-to-one association. Furthermore, + there is no reason to use inverse="true". + + + + + + Initializes this Bag from the cached values. + + The CollectionPersister to use to reassemble the PersistentIdentifierBag. + The disassembled PersistentIdentifierBag. + The owner object. + + + + A persistent wrapper for an + + The type of the element the list should hold. + The underlying collection used is a + + + + Initializes an instance of the + in the . + + The the list is in. + + + + Initializes an instance of the + that wraps an existing in the . + + The the bag is in. + The to wrap. + + + + Return a new snapshot of the current state. + + The for this Collection. + + A new that contains Deep Copies of the + Elements stored in this wrapped collection. + + + + + Get all "orphaned" elements. + + The snapshot of the collection. + The type of the entities the collection + is supposed to contain. + + An that contains all of the elements + that have been orphaned. + + + + + A persistent wrapper for a . Underlying + collection is a + + The type of the keys in the IDictionary. + The type of the elements in the IDictionary. + + + + Initializes an instance of the + in the . + + The the map is in. + + + + Initializes an instance of the + that wraps an existing in the + . + + The the bag is in. + The to wrap. + + + + .NET has no design equivalent for Java's Set so we are going to use the + Iesi.Collections library. This class is internal to NHibernate and shouldn't + be used by user code. + + + The code for the Iesi.Collections library was taken from the article + Add Support for "Set" Collections + to .NET that was written by JasonSmith. + + + + + The that NHibernate is wrapping. + + + + + A temporary list that holds the objects while the set is being + populated from the database. + + + This is necessary to ensure that the object being added to the set doesn't + have its and + methods called during the load process. + + + + + Returns a Hashtable where the Key & the Value are both a Copy of the + same object. + + + + + + + This constructor is NOT meant to be called from user code. + + + + + Creates a new PersistentGenericSet initialized to the values in the Map. + This constructor is NOT meant to be called from user code. + + + Only call this constructor if you consider the map initialized. + + + + + Initializes this PersistentGenericSet from the cached values. + + The CollectionPersister to use to reassemble the set. + The disassembled set. + The owner object. + + + + + + + + + + + + + + + + Set up the temporary List that will be used in the EndRead() + to fully create the set. + + + + + Takes the contents stored in the temporary list created during + that was populated during and writes it to the underlying + set. + + + + + + + + + + + + + + + + + + + + A persistent wrapper for an array. lazy initialization is NOT supported + + + + + The that NHibernate is wrapping. + + + + + A temporary list that holds the objects while the PersistentArrayHolder is being + populated from the database. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Before is called the PersistentArrayHolder needs to setup + a temporary list to hold the objects. + + + + + Takes the contents stored in the temporary list created during + that was populated during and write it to the underlying + array. + + + + + Initializes this array holder from the cached values. + + The CollectionPersister to use to reassemble the Array. + The disassembled Array. + The owner object. + + + + Returns the user-visible portion of the NHibernate PersistentArrayHolder. + + + The array that contains the data, not the NHibernate wrapper. + + + + + + + + + + + + + + + An unordered, unkeyed collection that can contain the same element + multiple times. The .NET collections API has no Bag class. + Most developers seem to use s to represent bag semantics, + so NHibernate follows this practice. + + + + + Counts the number of times that the occurs + in the . + + The element to find in the list. + The to search. + The that can determine equality. + + The number of occurrences of the element in the list. + + + + + Initializes this PersistentBag from the cached values. + + The CollectionPersister to use to reassemble the PersistentBag. + The disassembled PersistentBag. + The owner object. + + + + Gets a indicating if this PersistentBag needs to be recreated + in the database. + + + + if this is a one-to-many Bag, if this is not + a one-to-many Bag. Since a Bag is an unordered, unindexed collection + that permits duplicates it is not possible to determine what has changed in a + many-to-many so it is just recreated. + + + + + Implements "bag" semantics more efficiently than a regular + by adding a synthetic identifier column to the table. + + + + The identifier is unique for all rows in the table, allowing very efficient + updates and deletes. The value of the identifier is never exposed to the + application. + + + PersistentIdentifierBags may not be used for a many-to-one association. Furthermore, + there is no reason to use inverse="true". + + + + + + Initializes this Bag from the cached values. + + The CollectionPersister to use to reassemble the PersistentIdentifierBag. + The disassembled PersistentIdentifierBag. + The owner object. + + + + A persistent wrapper for an + + + The underlying collection used in an . + + + + + Return a new snapshot of the current state. + + The for this Collection. + + A new that contains Deep Copies of the + Elements stored in this wrapped collection. + + + + + Initializes an instance of the + in the . + + The the list is in. + + + + Initializes an instance of the + that wraps an existing in the . + + The the list is in. + The to wrap. + + + + + + + Initializes this PersistentList from the cached values. + + The CollectionPersister to use to reassemble the PersistentList. + The disassembled PersistentList. + The owner object. + + + + + + + + + + + + + + + + A persistent wrapper for a . Underlying collection + is a . + + + + + Construct an uninitialized PersistentMap. + + The ISession the PersistentMap should be a part of. + + + + Construct an initialized PersistentMap based off the values from the existing IDictionary. + + The ISession the PersistentMap should be a part of. + The IDictionary that contains the initial values. + + + + Initializes this PersistentMap from the cached values. + + The CollectionPersister to use to reassemble the PersistentMap. + The disassembled PersistentMap. + The owner object. + + + + .NET has no design equivalent for Java's Set so we are going to use the + Iesi.Collections library. This class is internal to NHibernate and shouldn't + be used by user code. + + + The code for the Iesi.Collections library was taken from the article + Add Support for "Set" Collections + to .NET that was written by JasonSmith. + + + + + The that NHibernate is wrapping. + + + + + A temporary list that holds the objects while the PersistentSet is being + populated from the database. + + + This is necessary to ensure that the object being added to the PersistentSet doesn't + have its' GetHashCode() and Equals() methods called during the load + process. + + + + + Returns a Hashtable where the Key & the Value are both a Copy of the + same object. + + + + + + + This constructor is NOT meant to be called from user code. + + + + + Creates a new PersistentSet initialized to the values in the Map. + This constructor is NOT meant to be called from user code. + + + Only call this constructor if you consider the map initialized. + + + + + Initializes this PersistentSet from the cached values. + + The CollectionPersister to use to reassemble the PersistentSet. + The disassembled PersistentSet. + The owner object. + + + + + + + + + + + + + + + + Set up the temporary List that will be used in the EndRead() + to fully create the set. + + + + + Takes the contents stored in the temporary list created during BeginRead() + that was populated during ReadFrom() and write it to the underlying + PersistentSet. + + + + + + + + + + + + + + + + + + + + The base class for the ConnectionProvider. + + + + + A strategy for obtaining ADO.NET . + + + The IConnectionProvider interface is not intended to be exposed to the application. + Instead it is used internally by NHibernate to obtain . + Implementors should provide a public default constructor. + + + + + Initialize the connection provider from the given properties. + + The connection provider settings + + + + Dispose of a used + + The to clean up. + + + + Get an open . + + An open . + + + + Gets the this ConnectionProvider should use to + communicate with the .NET Data Provider + + + The to communicate with the .NET Data Provider. + + + + + Closes the . + + The to clean up. + + + + Configures the ConnectionProvider with the Driver and the ConnectionString. + + An that contains the settings for this ConnectionProvider. + + Thrown when a could not be found + in the settings parameter or the Driver Class could not be loaded. + + + + + Get the .NET 2.0 named connection string + + + Thrown when a was found + in the settings parameter but could not be found in the app.config + + + + + Configures the driver for the ConnectionProvider. + + An that contains the settings for the Driver. + + Thrown when the could not be + found in the settings parameter or there is a problem with creating + the . + + + + + Get an open . + + An open . + + + + A flag to indicate if Disose() has been called. + + + + + Finalizer that ensures the object is correctly disposed of. + + + + + Takes care of freeing the managed and unmanaged resources that + this class is responsible for. + + + + + Takes care of freeing the managed and unmanaged resources that + this class is responsible for. + + Indicates if this ConnectionProvider is being Disposed of or Finalized. + +

+ If this ConnectionProvider is being Finalized (isDisposing==false) then make + sure not to call any methods that could potentially bring this + ConnectionProvider back to life. +

+

+ If any subclasses manage resources that also need to be disposed of this method + should be overridden, but don't forget to call it in the override. +

+
+
+ + + Gets the for the + to connect to the database. + + + The for the + to connect to the database. + + + + + Gets the that can create the object. + + + The that can create the . + + + + + Instanciates a connection provider given configuration properties. + + + + + A ConnectionProvider that uses an IDriver to create connections. + + + + + Initializes a new instance of the class. + + + + + Closes and Disposes of the . + + The to clean up. + + + + Gets a new open through + the . + + + An Open . + + + If there is any problem creating or opening the . + + + + + An implementation of the IConnectionProvider that simply throws an exception when + a connection is requested. + + + This implementation indicates that the user is expected to supply an ADO.NET connection + + + + + Throws an if this method is called + because the user is responsible for closing s. + + The to clean up. + + Thrown when this method is called. User is responsible for closing + s. + + + + + Throws an if this method is called + because the user is responsible for creating s. + + + No value is returned because an is thrown. + + + Thrown when this method is called. User is responsible for creating + s. + + + + + Configures the ConnectionProvider with only the Driver class. + + + + All other settings of the Connection are the responsibility of the User since they configured + NHibernate to use a Connection supplied by the User. + + + + + Provides a current session + for each . + Not recommended for .NET 2.0 web applications. + + + + + Extends the contract defined by + by providing methods to bind and unbind sessions to the current context. + + + The notion of a contextual session is managed by some external entity + (generally some form of interceptor like the HttpModule). + This external manager is responsible for scoping these contextual sessions + appropriately binding/unbinding them here for exposure to the application + through calls. + + + + + Defines the contract for implementations which know how to + scope the notion of a current session. + + + + Implementations should adhere to the following: + + contain a constructor accepting a single argument of type + + should be thread safe + should be fully serializable + + + + Implementors should be aware that they are also fully responsible for + cleanup of any generated current-sessions. + + + Note that there will be exactly one instance of the configured + ICurrentSessionContext implementation per . + + + It is recommended to inherit from the class + whenever possible as it simplifies the implementation and provides + single entry point with session binding support. + + + + + + Retrieve the current session according to the scoping defined + by this implementation. + + The current session. + Typically indicates an issue + locating or creating the current session. + + + + Retrieve the current session according to the scoping defined + by this implementation. + + The current session. + Indicates an issue + locating the current session. + + + + Binds the specified session to the current context. + + + + + Returns whether there is a session bound to the current context. + + + + + Unbinds and returns the current session. + + + + Gets or sets the currently bound session. + + + + Get the dicitonary mapping session factory to its current session. + + + + + Set the map mapping session factory to its current session. + + + + + Gets or sets the currently bound session. + + + + + The key is the session factory and the value is the bound session. + + + + + The key is the session factory and the value is the bound session. + + + + + Provides a current session + for each . + Works only with Web Applications. + + + + + A impl which scopes the notion of current + session by the current thread of execution. Threads do not give us a + nice hook to perform any type of cleanup making + it questionable for this impl to actually generate Session instances. In + the interest of usability, it was decided to have this default impl + actually generate a session upon first request and then clean it up + after the associated with that session + is committed/rolled-back. In order for ensuring that happens, the sessions + generated here are unusable until after {@link Session#beginTransaction()} + has been called. If Close() is called on a session managed by + this class, it will be automatically unbound. +

+ Additionally, the static and methods are + provided to allow application code to explicitly control opening and + closing of these sessions. This, with some from of interception, + is the preferred approach. It also allows easy framework integration + and one possible approach for implementing long-sessions. +

+

+
+ + + Unassociate a previously bound session from the current thread of execution. + + + + + + + Provides a current session + for each . Works only with web applications. + + + + + Base class for implementations. + + + + + An object-oriented representation of a query criterion that may be used as a constraint + in a query. + + + Built-in criterion types are provided by the Expression factory class. + This interface might be implemented by application classes but, more commonly, application + criterion types would extend AbstractCriterion. + + + + + Render a SqlString fragment for the expression. + + A SqlString that contains a valid Sql fragment. + + + + Return typed values for all parameters in the rendered SQL fragment + + An array of TypedValues for the Expression. + + + + Gets a string representation of the . + + + A String that shows the contents of the . + + + This is not a well formed Sql fragment. It is useful for logging what the + looks like. + + + + + Render a SqlString for the expression. + + A SqlString that contains a valid Sql fragment. + + + + Return typed values for all parameters in the rendered SQL fragment + + An array of TypedValues for the Expression. + + + + See here for details: + http://steve.emxsoftware.com/NET/Overloading+the++and++operators + + + + + See here for details: + http://steve.emxsoftware.com/NET/Overloading+the++and++operators + + + + + See here for details: + http://steve.emxsoftware.com/NET/Overloading+the++and++operators + + + + + See here for details: + http://steve.emxsoftware.com/NET/Overloading+the++and++operators + + + + + An Aggregation + + + + + A single-column projection that may be aliased + + + + + Render the SQL Fragment. + + The criteria. + The position. + The criteria query. + The enabled filters. + + + + + Render the SQL Fragment to be used in the Group By Clause. + + The criteria. + The criteria query. + The enabled filters. + + + + + Return types for a particular user-visible alias + + + + + + + + + + + + + + + + + Get the SQL select clause column aliases for a particular user-visible alias + + + + + + + Get the SQL select clause column aliases for a particular user-visible alias + + + + + + + + Gets the typed values for parameters in this projection + + The criteria. + The criteria query. + + + + + Get the user-visible aliases for this projection (ie. the ones that will be passed to the ResultTransformer) + + + + + Does this projection specify grouping attributes? + + + + + Gets the typed values for parameters in this projection + + The criteria. + The criteria query. + + + + + Gets the typed values for parameters in this projection + + The criteria. + The criteria query. + + + + + An that combines two s + with an and between them. + + + + + An that combines two s + with a operator (either "and" or "or") between them. + + + + + Initialize a new instance of the class that + combines two other s. + + The to use in the Left Hand Side. + The to use in the Right Hand Side. + + + + Combines the for the Left Hand Side and the + Right Hand Side of the Expression into one array. + + An arry of s. + + + + Converts the LogicalExpression to a . + + A well formed SqlString for the Where clause. + The SqlString will be enclosed by ( and ). + + + + Gets a string representation of the LogicalExpression. + + + The String contains the LeftHandSide.ToString() and the RightHandSide.ToString() + joined by the Op. + + + This is not a well formed Sql fragment. It is useful for logging what Expressions + are being combined. + + + + + Gets the that will be on the Left Hand Side of the Op. + + + + + Gets the that will be on the Right Hand Side of the Op. + + + + + Get the Sql operator to put between the two s. + + + + + Initializes a new instance of the class + that combines two . + + The to use as the left hand side. + The to use as the right hand side. + + + + Get the Sql operator to put between the two s. + + The string "and" + + + + An that represents a "between" constraint. + + + + + Initializes a new instance of the class. + + The _projection. + The _lo. + The _hi. + + + + Initialize a new instance of the class for + the named Property. + + The name of the Property of the Class. + The low value for the BetweenExpression. + The high value for the BetweenExpression. + + + + + + + Casting a value from one type to another, at the database + level + + + + + An that Junctions together multiple + s with an and + + + + + A sequence of logical s combined by some associative + logical operator. + + + + + Adds an to the list of s + to junction together. + + The to add. + + This instance. + + + + + Get the Sql operator to put between multiple s. + + + + + The corresponding to an instance with no added + subcriteria. + + + + + Get the Sql operator to put between multiple s. + + The string " and " + + + + This is useful if we want to send a value to the database + + + + + A Count + + + + The alias that refers to the "root" entity of the criteria query. + + + Each row of results is a from alias to entity instance + + + Each row of results is an instance of the root entity + + + Each row of results is a distinct instance of the root entity + + + This result transformer is selected implicitly by calling + + + Specifies joining to an entity based on an inner join. + + + Specifies joining to an entity based on a full join. + + + Specifies joining to an entity based on a left outer join. + + + + Some applications need to create criteria queries in "detached + mode", where the Hibernate session is not available. This class + may be instantiated anywhere, and then a ICriteria + may be obtained by passing a session to + GetExecutableCriteria(). All methods have the + same semantics and behavior as the corresponding methods of the + ICriteria interface. + + + + + Get an executable instance of Criteria, + to actually run the query. + + + + An that Junctions together multiple + s with an or + + + + + Get the Sql operator to put between multiple s. + + The string " or " + + + + Gets the typed values for parameters in this projection + + The criteria. + The criteria query. + + + + + An that represents an "equal" constraint + between two properties. + + + + + Superclass for an that represents a + constraint between two properties (with SQL binary operators). + + + + + Initializes a new instance of the class. + + The projection. + Name of the RHS property. + + + + Initializes a new instance of the class. + + The LHS projection. + The RHS projection. + + + + Initializes a new instance of the class. + + Name of the LHS property. + Name of the RHS property. + + + + Initializes a new instance of the class. + + Name of the LHS property. + The RHS projection. + + + + + + + Get the Sql operator to use for the property expression. + + + + + Initializes a new instance of the class. + + Name of the LHS property. + The RHS projection. + + + + Initializes a new instance of the class. + + The LHS projection. + The RHS projection. + + + + Initializes a new instance of the class. + + The projection. + Name of the RHS property. + + + + Initializes a new instance of the class + that compares two mapped properties using an "equal" constraint. + + The name of the Property to use as the left hand side. + The name of the Property to use as the right hand side. + + + + Get the Sql operator to use for the . + + The string " = " + + + + Support for Query By Example. + + + + List results = session.CreateCriteria(typeof(Parent)) + .Add( Example.Create(parent).IgnoreCase() ) + .CreateCriteria("child") + .Add( Example.Create( parent.Child ) ) + .List(); + + + + "Examples" may be mixed and matched with "Expressions" in the same + + + + + Set escape character for "like" clause + + + + Set the for this . + + The to determine which properties to include. + This instance. + + This should be used when a custom has + been implemented. Otherwise use the methods + or to set the + to the s built into NHibernate. + + + + + Set the for this + to exclude zero-valued properties. + + + + + Set the for this + to exclude no properties. + + + + + Use the "like" operator for all string-valued properties with + the specified . + + + The to convert the string to the pattern + for the like comparison. + + + + + Use the "like" operator for all string-valued properties. + + + The default is MatchMode.Exact. + + + + + Exclude a particular named property + + The name of the property to exclude. + + + + Create a new instance, which includes all non-null properties + by default + + + A new instance of . + + + + Initialize a new instance of the class for a particular + entity. + + The that the Example is being built from. + The the Example should use. + + + + Determines if the property should be included in the Query. + + The value of the property. + The name of the property. + The of the property. + + if the Property should be included, if + the Property should not be a part of the Query. + + + + + Adds a based on the value + and type parameters to the in the + list parameter. + + The value of the Property. + The of the Property. + The to add the to. + + This method will add objects to the list parameter. + + + + + A strategy for choosing property values for inclusion in the query criteria + + + + + Determine if the Property should be included. + + The value of the property that is being checked for inclusion. + The name of the property that is being checked for inclusion. + The of the property. + + if the Property should be included in the Query, + otherwise. + + + + + Implementation of that includes all + properties regardless of value. + + + + + Implementation of that includes the + properties that are not and do not have an + returned by propertyValue.ToString(). + + + This selector is not present in H2.1. It may be useful if nullable types + are used for some properties. + + + + + This class is semi-deprecated. Use . + + + + + + The namespace may be used by applications as a framework for building + new kinds of . + However, it is intended that most applications will + simply use the built-in criterion types via the static factory methods of this class. + + + + + + + Apply an "equal" constraint to the identifier property + + + ICriterion + + + + Apply an "equal" constraint from the projection to the identifier property + + The projection. + ICriterion + + + + Apply an "equal" constraint to the named property + + The name of the Property in the class. + The value for the Property. + + + + Apply an "equal" constraint to the projection + + The projection. + The value for the Property. + + + + Apply a "like" constraint to the named property + + The name of the Property in the class. + The value for the Property. + A . + + + + Apply a "like" constraint to the project + + The projection. + The value for the Property. + A . + + + + Apply a "like" constraint to the project + + The projection. + The value for the Property. + The match mode. + A . + + + + A case-insensitive "like", similar to Postgres "ilike" operator + + The name of the Property in the class. + The value for the Property. + An . + + + + A case-insensitive "like", similar to Postgres "ilike" operator + + The projection. + The value for the Property. + + An . + + + + + Apply a "greater than" constraint to the named property + + The name of the Property in the class. + The value for the Property. + + + + Apply a "greater than" constraint to the projection + + The projection. + The value for the Property. + + + + Apply a "less than" constraint to the named property + + The name of the Property in the class. + The value for the Property. + + + + Apply a "less than" constraint to the projection + + The projection. + The value for the Property. + + + + Apply a "less than or equal" constraint to the named property + + The name of the Property in the class. + The value for the Property. + + + + Apply a "less than or equal" constraint to the projection + + The projection. + The value for the Property. + + + + Apply a "greater than or equal" constraint to the named property + + The name of the Property in the class. + The value for the Property. + + + + Apply a "greater than or equal" constraint to the projection + + The projection. + The value for the Property. + + + + Apply a "between" constraint to the named property + + The name of the Property in the class. + The low value for the Property. + The high value for the Property. + A . + + + + Apply a "between" constraint to the projection + + The projection. + The low value for the Property. + The high value for the Property. + A . + + + + Apply an "in" constraint to the named property + + The name of the Property in the class. + An array of values. + An . + + + + Apply an "in" constraint to the projection + + The projection. + An array of values. + An . + + + + Apply an "in" constraint to the projection + + The projection. + An ICollection of values. + An . + + + + Apply an "in" constraint to the named property + + The name of the Property in the class. + An ICollection of values. + An . + + + + Apply an "in" constraint to the named property. This is the generic equivalent + of , renamed to avoid ambiguity. + + The name of the Property in the class. + An + of values. + An . + + + + Apply an "in" constraint to the projection. This is the generic equivalent + of , renamed to avoid ambiguity. + + + The projection. + An + of values. + An . + + + + Apply an "is null" constraint to the named property + + The name of the Property in the class. + A . + + + + Apply an "is null" constraint to the projection + + The projection. + A . + + + + Apply an "equal" constraint to two properties + + The lhs Property Name + The rhs Property Name + A . + + + + Apply an "equal" constraint to projection and property + + The projection. + The rhs Property Name + A . + + + + Apply an "equal" constraint to lshProjection and rshProjection + + The LHS projection. + The RSH projection. + A . + + + + Apply an "equal" constraint to the property and rshProjection + + Name of the property. + The RSH projection. + A . + + + + Apply an "not equal" constraint to two properties + + The lhs Property Name + The rhs Property Name + A . + + + + Apply an "not equal" constraint to projection and property + + The projection. + The rhs Property Name + A . + + + + Apply an "not equal" constraint to the projections + + The LHS projection. + The RHS projection. + A . + + + + Apply an "not equal" constraint to the projections + + Name of the property. + The RHS projection. + A . + + + + Apply a "greater than" constraint to two properties + + The lhs Property Name + The rhs Property Name + A . + + + + Apply a "greater than" constraint to two properties + + The projection. + The rhs Property Name + A . + + + + Apply a "greater than" constraint to two properties + + Name of the property. + The projection. + A . + + + + Apply a "greater than" constraint to two properties + + The LHS projection. + The RHS projection. + A . + + + + Apply a "greater than or equal" constraint to two properties + + The lhs Property Name + The rhs Property Name + A . + + + + Apply a "greater than or equal" constraint to two properties + + The LHS projection. + The RHS projection. + A . + + + + Apply a "greater than or equal" constraint to two properties + + The projection. + The rhs Property Name + A . + + + + Apply a "greater than or equal" constraint to two properties + + The lhs Property Name + The projection. + A . + + + + Apply a "less than" constraint to two properties + + The lhs Property Name + The rhs Property Name + A . + + + + Apply a "less than" constraint to two properties + + The projection. + The rhs Property Name + A . + + + + Apply a "less than" constraint to two properties + + The lhs Property Name + The projection. + A . + + + + Apply a "less than" constraint to two properties + + The LHS projection. + The RHS projection. + A . + + + + Apply a "less than or equal" constraint to two properties + + The lhs Property Name + The rhs Property Name + A . + + + + Apply a "less than or equal" constraint to two properties + + The projection. + The rhs Property Name + A . + + + + Apply a "less than or equal" constraint to two properties + + The lhs Property Name + The projection. + A . + + + + Apply a "less than or equal" constraint to two properties + + The LHS projection. + The RHS projection. + A . + + + + Apply an "is not null" constraint to the named property + + The name of the Property in the class. + A . + + + + Apply an "is not null" constraint to the named property + + The projection. + A . + + + + Apply an "is not empty" constraint to the named property + + The name of the Property in the class. + A . + + + + Apply an "is not empty" constraint to the named property + + The name of the Property in the class. + A . + + + + Return the conjuction of two expressions + + The Expression to use as the Left Hand Side. + The Expression to use as the Right Hand Side. + An . + + + + Return the disjuction of two expressions + + The Expression to use as the Left Hand Side. + The Expression to use as the Right Hand Side. + An . + + + + Return the negation of an expression + + The Expression to negate. + A . + + + + Group expressions together in a single conjunction (A and B and C...) + + + + + Group expressions together in a single disjunction (A or B or C...) + + + + + Apply an "equals" constraint to each property in the key set of a IDictionary + + a dictionary from property names to values + + + + + Apply a constraint expressed in SQL, with the given SQL parameters + + + + + + + + + Apply a constraint expressed in SQL, with the given SQL parameter + + + + + + + + + Apply a constraint expressed in SQL, with the given SQL parameter + + + + + Apply a constraint expressed in SQL + + + + + + + Apply a constraint expressed in SQL + + + + + + + An that represents an "greater than or equal" constraint + between two properties. + + + + + Initializes a new instance of the class. + + Name of the LHS property. + The RHS projection. + + + + Initializes a new instance of the class. + + The LHS projection. + The RHS projection. + + + + Initializes a new instance of the class. + + The projection. + Name of the RHS property. + + + + Initializes a new instance of the class + that compares two mapped properties using an "greater than or equal" constraint. + + The name of the Property to use as the left hand side. + The name of the Property to use as the right hand side. + + + + Get the Sql operator to use for the . + + The string " < " + + + + An that represents an "greater than" constraint + between two properties. + + + + + Initializes a new instance of the class. + + Name of the LHS property. + The RHS projection. + + + + Initializes a new instance of the class. + + The LHS projection. + The RHS projection. + + + + Initializes a new instance of the class. + + The projection. + Name of the RHS property. + + + + Initializes a new instance of the class + that compares two mapped properties using an "greater than" constraint. + + The name of the Property to use as the left hand side. + The name of the Property to use as the right hand side. + + + + Get the Sql operator to use for the . + + The string " < " + + + + An identifier constraint + + + + + An that constrains the property + to a specified list of values. + + + InExpression - should only be used with a Single Value column - no multicolumn properties... + + + + + Initializes a new instance of the class. + + The projection. + The _values. + + + + + + + + + + + + + + An that represents an "like" constraint + that is not case sensitive. + + + + + Initializes a new instance of the class. + + The projection. + The value. + The match mode. + + + + Initializes a new instance of the class. + + The projection. + The _value. + + + + Initialize a new instance of the + class for a named Property and its value. + + The name of the Property in the class. + The value for the Property. + + + + + + + An that represents empty association constraint. + + + + + An that represents non-empty association constraint. + + + + + An that represents an "less than or equal" constraint + between two properties. + + + + + Initializes a new instance of the class. + + Name of the LHS property. + The RHS projection. + + + + Initializes a new instance of the class. + + The LHS projection. + The RHS projection. + + + + Initializes a new instance of the class. + + The projection. + Name of the RHS property. + + + + Initializes a new instance of the class + that compares two mapped properties using an "less than or equal" constraint. + + The name of the Property to use as the left hand side. + The name of the Property to use as the right hand side. + + + + Get the Sql operator to use for the . + + The string " <= " + + + + An that represents an "like" constraint. + + + The case sensitivity depends on the database settings for string + comparisons. Use if the + string comparison should not be case sensitive. + + + + + An that represents an "less than" constraint + between two properties. + + + + + Initializes a new instance of the class. + + Name of the LHS property. + The RHS projection. + + + + Initializes a new instance of the class. + + The LHS projection. + The RHS projection. + + + + Initializes a new instance of the class. + + The projection. + Name of the RHS property. + + + + Initializes a new instance of the class + that compares two mapped properties using an "less than" constraint. + + The name of the Property to use as the left hand side. + The name of the Property to use as the right hand side. + + + + Get the Sql operator to use for the . + + The string " < " + + + + Represents an strategy for matching strings using "like". + + + + + Initialize a new instance of the class. + + The code that identifies the match mode. + The friendly name of the match mode. + + The parameter intCode is used as the key of + to store instances and to ensure only instance of a particular + is created. + + + + + The string representation of the . + + The friendly name used to describe the . + + + + Convert the pattern, by appending/prepending "%" + + The string to convert to the appropriate match pattern. + + A that contains a "%" in the appropriate place + for the Match Strategy. + + + + + Match the entire string to the pattern + + + + + Match the start of the string to the pattern + + + + + Match the end of the string to the pattern + + + + + Match the pattern anywhere in the string + + + + + The that matches the entire string to the pattern. + + + + + Initialize a new instance of the class. + + + + + Converts the string to the Exact MatchMode. + + The string to convert to the appropriate match pattern. + The pattern exactly the same as it was passed in. + + + + The that matches the start of the string to the pattern. + + + + + Initialize a new instance of the class. + + + + + Converts the string to the Start MatchMode. + + The string to convert to the appropriate match pattern. + The pattern with a "%" appended at the end. + + + + The that matches the end of the string to the pattern. + + + + + Initialize a new instance of the class. + + + + + Converts the string to the End MatchMode. + + The string to convert to the appropriate match pattern. + The pattern with a "%" appended at the beginning. + + + + The that exactly matches the string + by appending "%" to the beginning and end. + + + + + Initialize a new instance of the class. + + + + + Converts the string to the Exact MatchMode. + + The string to convert to the appropriate match pattern. + The pattern with a "%" appended at the beginning and the end. + + + + An that negates another . + + + + + Initialize a new instance of the class for an + + + The to negate. + + + + An that represents "not null" constraint. + + + + + Initializes a new instance of the class. + + The projection. + + + + Initialize a new instance of the class for a named + Property that should not be null. + + The name of the Property in the class. + + + + An that represents "null" constraint. + + + + + Initializes a new instance of the class. + + The projection. + + + + Initialize a new instance of the class for a named + Property that should be null. + + The name of the Property in the class. + + + + + + + Represents an order imposed upon a + result set. + + + + + Constructor for Order. + + + + + + + Render the SQL fragment + + + + + Ascending order + + + + + + + Descending order + + + + + + + An that combines two s with an + "or" between them. + + + + + Initialize a new instance of the class for + two s. + + The to use as the left hand side. + The to use as the right hand side. + + + + Get the Sql operator to put between the two s. + + Returns "or" + + + + Gets the typed values for parameters in this projection + + The criteria. + The criteria query. + + + + + The criterion package may be used by applications as a framework for building + new kinds of Projection. However, it is intended that most applications will + simply use the built-in projection types via the static factory methods of this class.
+
+ The factory methods that take an alias allow the projected value to be referred to by + criterion and order instances. +
+
+ + + Create a distinct projection from a projection + + + + + + + Create a new projection list + + + + + + The query row count, ie. count(*) + + The RowCount projection mapped to an . + + + + The query row count, ie. count(*) + + The RowCount projection mapped to an . + + + + A property value count + + + + + + + A distinct property value count + + + + + + + A property maximum value + + + + + + + A property minimum value + + + + + + + A property average value + + + + + + + A property value sum + + + + + + + A SQL projection, a typed select clause fragment + + + + + + + + + A grouping SQL projection, specifying both select clause and group by clause fragments + + + + + + + + + + A grouping property value + + + + + + + A projected property value + + + + + + + A projected identifier value + + + + + + Assign an alias to a projection, by wrapping it + + + + + + + + Casts the projection result to the specified type. + + The type. + The projection. + + + + + Return a constant value + + The obj. + + + + + Calls the named + + Name of the function. + The type. + The projections. + + + + + Calls the specified + + the function. + The type. + The projections. + + + + + Conditionally return the true or false part, dependention on the criterion + + The criterion. + The when true. + The when false. + + + + + A factory for property-specific AbstractCriterion and projection instances + + + + + A property value, or grouped property value + + + + + Get a component attribute of this property + + + + + A comparison between a property value in the outer query and the + result of a subquery + + + + + The base class for an that compares a single Property + to a value. + + + + + Initialize a new instance of the class for a named + Property and its value. + + The name of the Property in the class. + The value for the Property. + The SQL operation. + + + + Converts the SimpleExpression to a . + + A SqlString that contains a valid Sql fragment. + + + + + + + Gets the named Property for the Expression. + + A string that is the name of the Property. + + + + Gets the Value for the Expression. + + An object that is the value for the Expression. + + + + Get the Sql operator to use for the specific + subclass of . + + + + + A comparison between a constant value and the the result of a subquery + + + + + An that creates a SQLExpression. + The string {alias} will be replaced by the alias of the root entity. + + + This allows for database specific Expressions at the cost of needing to + write a correct . + + + + + + + + A SQL fragment. The string {alias} will be replaced by the alias of the root entity. + + + + + Gets the typed values for parameters in this projection + + The criteria. + The criteria query. + + + + + Factory class for AbstractCriterion instances that represent + involving subqueries. + Expression + Projection + AbstractCriterion + + + + + Used to show a better debug display for dictionaries + + + + + + + + ::= + EXTRACT FROM + + ::= + | + + + + Represents HQL functions that can have different representations in different SQL dialects. + E.g. in HQL we can define function concat(?1, ?2) to concatenate two strings + p1 and p2. Target SQL function will be dialect-specific, e.g. (?1 || ?2) for + Oracle, concat(?1, ?2) for MySql, (?1 + ?2) for MS SQL. + Each dialect will define a template as a string (exactly like above) marking function + parameters with '?' followed by parameter's index (first index is 1). + + + + + Provides support routines for the HQL functions as used + in the various SQL Dialects + + Provides an interface for supporting various HQL functions that are + translated to SQL. The Dialect and its sub-classes use this interface to + provide details required for processing of the function. + + + + + The function return type + + The type of the first argument + + + + + + Render the function call as SQL. + + List of arguments + + SQL fragment for the fuction. + + + + Does this function have any arguments? + + + + + If there are no arguments, are parens required? + + + + + Applies the template to passed in arguments. + + args function arguments + generated SQL function call + + + + + ANSI-SQL substring + Documented in: + ANSI X3.135-1992 + American National Standard for Information Systems - Database Language - SQL + + + Syntax: + ::= + SUBSTRING FROM < start position> + [ FOR ] + ]]> + + + + + A SQLFunction implementation that emulates the ANSI SQL trim function + on dialects which do not support the full definition. However, this function + definition does assume the availability of ltrim, rtrim, and replace functions + which it uses in various combinations to emulate the desired ANSI trim() + functionality. + + + + + + + + + + + according to both the ANSI-SQL and EJB3 specs, trim can either take + exactly one parameter or a variable number of parameters between 1 and 4. + from the SQL spec: + ::= + TRIM + + ::= + [ [ ] [ ] FROM ] + + ::= + LEADING + | TRAILING + | BOTH + ]]> + If only trim specification is omitted, BOTH is assumed; + if trim character is omitted, space is assumed + + + + + ANSI-SQL style cast(foo as type) where the type is a NHibernate type + + + + + Emulation of locate() on Sybase + + + + + Initializes a new instance of the StandardSQLFunction class. + + SQL function name. + Whether the function accepts an asterisk (*) in place of arguments + + + + Initializes a new instance of the StandardSQLFunction class. + + SQL function name. + True if accept asterisk like argument + Return type for the fuction. + + + + Classic AVG sqlfunction that return types as it was done in Hibernate 3.1 + + + + + Classic COUNT sqlfunction that return types as it was done in Hibernate 3.1 + + + + + Classic SUM sqlfunction that return types as it was done in Hibernate 3.1 + + + + + Summary description for NoArgSQLFunction. + + + + + Emulation of coalesce() on Oracle, using multiple nvl() calls + + + + + Emulation of locate() on PostgreSQL + + + + + Provides a standard implementation that supports the majority of the HQL + functions that are translated to SQL. + + + The Dialect and its sub-classes use this class to provide details required + for processing of the associated function. + + + + + Provides a standard implementation that supports the majority of the HQL + functions that are translated to SQL. + + + The Dialect and its sub-classes use this class to provide details required + for processing of the associated function. + + + + + Initializes a new instance of the StandardSQLFunction class. + + SQL function name. + + + + Initializes a new instance of the StandardSQLFunction class. + + SQL function name. + Return type for the fuction. + + + + Initializes a new instance of the StandardSafeSQLFunction class. + + SQL function name. + Exact number of arguments expected. + + + + Initializes a new instance of the StandardSafeSQLFunction class. + + SQL function name. + Return type for the fuction. + Exact number of arguments expected. + + + + Support for slightly more general templating than StandardSQLFunction, + with an unlimited number of arguments. + + + + + A strategy abstraction for how locks are obtained in the underlying database. + + + All locking provided implemenations assume the underlying database supports + (and that the connection is in) at least read-committed transaction isolation. + The most glaring exclusion to this is HSQLDB which only offers support for + READ_UNCOMMITTED isolation. + + + + + + Acquire an appropriate type of lock on the underlying data that will + endure until the end of the current transaction. + + The id of the row to be locked + The current version (or null if not versioned) + The object logically being locked (currently not used) + The session from which the lock request originated + + + + A locking strategy where the locks are obtained through select statements. + + + + + For non-read locks, this is achieved through the Dialect's specific + SELECT ... FOR UPDATE syntax. + + + + + A locking strategy where the locks are obtained through update statements. + + This strategy is not valid for read style locks. + + + + Construct a locking strategy based on SQL UPDATE statements. + + The metadata for the entity to be locked. + Indictates the type of lock to be acquired. + + read-locks are not valid for this strategy. + + + + + An SQL dialect for DB2 on iSeries OS/400. + + + The DB2400Dialect defaults the following configuration properties: + + + Property + Default Value + + + connection.driver_class + + + + + + + + An SQL dialect for DB2. + + + The DB2Dialect defaults the following configuration properties: + + + Property + Default Value + + + connection.driver_class + + + + + + + + Represents a dialect of SQL implemented by a particular RDBMS. Sublcasses + implement NHibernate compatibility with different systems. + + + Subclasses should provide a public default constructor that Register() + a set of type mappings and default Hibernate properties. + + + + + + + + + + + Characters used for quoting sql identifiers + + + + + + + + + + + The base constructor for Dialect. + + + Every subclass should override this and call Register() with every except + , , , , + , . + + + The Default properties for this Dialect should also be set - such as whether or not to use outer-joins + and what the batch size should be. + + + + + Get an instance of the dialect specified by the current properties. + The specified Dialect + + + + Get de from a property bag (prop name ) + + The property bag. + An instance of . + When is null. + When the property bag don't contains de property . + + + + Get the name of the database type associated with the given + , + + The SqlType + The database type name used by ddl. + + + + Get the name of the database type associated with the given + . + + The SqlType + The datatype length + The datatype precision + The datatype scale + The database type name used by ddl. + + + + Get the name of the database type appropriate for casting operations + (via the CAST() SQL function) for the given typecode. + + The typecode + The database type name + + + + Subclasses register a typename for the given type code and maximum + column length. $l in the type name will be replaced by the column + length (if appropriate) + + The typecode + Maximum length of database type + The database type name + + + + Suclasses register a typename for the given type code. $l in the + typename will be replaced by the column length (if appropriate). + + The typecode + The database type name + + + + Get the name of the Hibernate associated with th given + typecode. + + The typecode + The Hibernate name. + + + + Get the name of the Hibernate associated + with the given typecode with the given storage + specification parameters. + + The typecode + The datatype length + The datatype precision + The datatype scale + The Hibernate name. + + + + Registers a Hibernate name for the given + type code and maximum column length. + + The typecode + The maximum length of database type + The Hibernate name + + + + Registers a Hibernate name for the given + type code. + + The typecode + The Hibernate name + + + + + + + + + + + The syntax used to add a foreign key constraint to a table. + + The FK constraint name. + The names of the columns comprising the FK + The table referenced by the FK + The explicit columns in the referencedTable referenced by this FK. + + if false, constraint should be explicit about which column names the constraint refers to + + the "add FK" fragment + + + + The syntax used to add a primary key constraint to a table + + + + + + Get a strategy instance which knows how to acquire a database-level lock + of the specified mode for this dialect. + + The persister for the entity to be locked. + The type of lock to be acquired. + The appropriate locking strategy. + + + + Given a lock mode, determine the appropriate for update fragment to use. + + The lock mode to apply. + The appropriate for update fragment. + + + + Get the FOR UPDATE OF column_list fragment appropriate for this + dialect given the aliases of the columns to be write locked. + + The columns to be write locked. + The appropriate FOR UPDATE OF column_list clause string. + + + + Get the FOR UPDATE OF column_list NOWAIT fragment appropriate + for this dialect given the aliases of the columns to be write locked. + + The columns to be write locked. + The appropriate FOR UPDATE colunm_list NOWAIT clause string. + + + + Modifies the given SQL by applying the appropriate updates for the specified + lock modes and key columns. + + the SQL string to modify + a map of lock modes indexed by aliased table names. + a map of key columns indexed by aliased table names. + the modified SQL string. + + The behavior here is that of an ANSI SQL SELECT FOR UPDATE. This + method is really intended to allow dialects which do not support + SELECT FOR UPDATE to achieve this in their own fashion. + + + + + Some dialects support an alternative means to SELECT FOR UPDATE, + whereby a "lock hint" is appends to the table name in the from clause. + + The lock mode to apply + The name of the table to which to apply the lock hint. + The table with any required lock hints. + + + + Return SQL needed to drop the named table. May (and should) use + some form of "if exists" clause, and cascade constraints. + + + + + + Generate a temporary table name given the bas table. + The table name from which to base the temp table name. + The generated temp table name. + + + + Does the dialect require that temporary table DDL statements occur in + isolation from other statements? This would be the case if the creation + would cause any current transaction to get committed implicitly. + + see the result matrix above. + + JDBC defines a standard way to query for this information via the + {@link java.sql.DatabaseMetaData#dataDefinitionCausesTransactionCommit()} + method. However, that does not distinguish between temporary table + DDL and other forms of DDL; MySQL, for example, reports DDL causing a + transaction commit via its driver, even though that is not the case for + temporary table DDL. +

+ Possible return values and their meanings:

    +
  • {@link Boolean#TRUE} - Unequivocally, perform the temporary table DDL in isolation.
  • +
  • {@link Boolean#FALSE} - Unequivocally, do not perform the temporary table DDL in isolation.
  • +
  • null - defer to the JDBC driver response in regards to {@link java.sql.DatabaseMetaData#dataDefinitionCausesTransactionCommit()}
  • +
+
+
+ + Do we need to drop the temporary table after use? + + + + Registers an OUT parameter which will be returing a + . How this is accomplished varies greatly + from DB to DB, hence its inclusion (along with {@link #getResultSet}) here. + + The callable statement. + The bind position at which to register the OUT param. + The number of (contiguous) bind positions used. + + + + Given a callable statement previously processed by , + extract the from the OUT parameter. + + The callable statement. + The extracted result set. + SQLException Indicates problems extracting the result set. + + + + The syntax used to drop a foreign key constraint from a table. + + The name of the foreign key constraint to drop. + + The SQL string to drop the foreign key constraint. + + + + + The syntax that is used to check if a constraint does not exists before creating it + + The table. + The name. + + + + + The syntax that is used to close the if for a constraint exists check, used + for dialects that requires begin/end for ifs + + The table. + The name. + + + + + The syntax that is used to check if a constraint exists before dropping it + + The table. + The name. + + + + + The syntax that is used to close the if for a constraint exists check, used + for dialects that requires begin/end for ifs + + The table. + The name. + + + + + The syntax used to drop a primary key constraint from a table. + + The name of the primary key constraint to drop. + + The SQL string to drop the primary key constraint. + + + + + The syntax used to drop an index constraint from a table. + + The name of the index constraint to drop. + + The SQL string to drop the primary key constraint. + + + + + Provided we , then attch the + "select identity" clause to the insert statement. + + The insert command + + The insert command with any necessary identity select clause attached. + Note, if == false then + the insert-string should be returned without modification. + + + + + Get the select command to use to retrieve the last generated IDENTITY + value for a particuar table + + The table into which the insert was done + The PK column. + The type code. + The appropriate select command + + + + The syntax used during DDL to define a column as being an IDENTITY of + a particular type. + + The type code. + The appropriate DDL fragment. + + + + Generate the appropriate select statement to to retreive the next value + of a sequence. + + the name of the sequence + String The "nextval" select string. + This should be a "stand alone" select statement. + + + + Typically dialects which support sequences can drop a sequence + with a single command. + + The name of the sequence + The sequence drop commands + + This is convenience form of + to help facilitate that. + + Dialects which support sequences and can drop a sequence in a + single command need *only* override this method. Dialects + which support sequences but require multiple commands to drop + a sequence should instead override . + + + + + The multiline script used to drop a sequence. + + The name of the sequence + The sequence drop commands + + + + Generate the select expression fragment that will retreive the next + value of a sequence as part of another (typically DML) statement. + + the name of the sequence + The "nextval" fragment. + + This differs from in that this + should return an expression usable within another statement. + + + + + Typically dialects which support sequences can create a sequence + with a single command. + + The name of the sequence + The sequence creation command + + This is convenience form of to help facilitate that. + Dialects which support sequences and can create a sequence in a + single command need *only* override this method. Dialects + which support sequences but require multiple commands to create + a sequence should instead override . + + + + + An optional multi-line form for databases which . + + The name of the sequence + The initial value to apply to 'create sequence' statement + The increment value to apply to 'create sequence' statement + The sequence creation commands + + + + Overloaded form of , additionally + taking the initial value and increment size to be applied to the sequence + definition. + + The name of the sequence + The initial value to apply to 'create sequence' statement + The increment value to apply to 'create sequence' statement + The sequence creation command + + The default definition is to suffix + with the string: " start with {initialValue} increment by {incrementSize}" where + {initialValue} and {incrementSize} are replacement placeholders. Generally + dialects should only need to override this method if different key phrases + are used to apply the allocation information. + + + + + Create a strategy responsible + for handling this dialect's variations in how joins are handled. + + This dialect's strategy. + + + + Create a strategy responsible + for handling this dialect's variations in how CASE statements are + handled. + + This dialect's strategy. + + + The SQL literal value to which this database maps boolean values. + The boolean value + The appropriate SQL literal. + + + + Add a LIMIT clause to the given SQL SELECT + + A Query in the form of a SqlString. + Offset of the first row to be returned by the query (zero-based) + Maximum number of rows to be returned by the query + A new SqlString that contains the LIMIT clause. + + + Apply s limit clause to the query. + The query to which to apply the limit. + Is the query requesting an offset? + the modified SQL + + Typically dialects utilize + limit caluses when they support limits. Thus, when building the + select command we do not actually need to know the limit or the offest + since we will just be using placeholders. +

+ Here we do still pass along whether or not an offset was specified + so that dialects not supporting offsets can generate proper exceptions. + In general, dialects will override one or the other of this method and + . + + + +

+ Checks to see if the name has been quoted. + + The name to check if it is quoted + true if name is already quoted. + + The default implementation is to compare the first character + to Dialect.OpenQuote and the last char to Dialect.CloseQuote + +
+ + + Quotes a name. + + The string that needs to be Quoted. + A QuotedName + +

+ This method assumes that the name is not already Quoted. So if the name passed + in is "name then it will return """name". It escapes the first char + - the " with "" and encloses the escaped string with OpenQuote and CloseQuote. +

+
+
+ + + Quotes a name for being used as a aliasname + + Original implementation calls + Name of the alias + A Quoted name in the format of OpenQuote + aliasName + CloseQuote + +

+ If the aliasName is already enclosed in the OpenQuote and CloseQuote then this + method will return the aliasName that was passed in without going through any + Quoting process. So if aliasName is passed in already Quoted make sure that + you have escaped all of the chars according to your DataBase's specifications. +

+
+
+ + + Quotes a name for being used as a columnname + + Original implementation calls + Name of the column + A Quoted name in the format of OpenQuote + columnName + CloseQuote + +

+ If the columnName is already enclosed in the OpenQuote and CloseQuote then this + method will return the columnName that was passed in without going through any + Quoting process. So if columnName is passed in already Quoted make sure that + you have escaped all of the chars according to your DataBase's specifications. +

+
+
+ + + Quotes a name for being used as a tablename + + Name of the table + A Quoted name in the format of OpenQuote + tableName + CloseQuote + +

+ If the tableName is already enclosed in the OpenQuote and CloseQuote then this + method will return the tableName that was passed in without going through any + Quoting process. So if tableName is passed in already Quoted make sure that + you have escaped all of the chars according to your DataBase's specifications. +

+
+
+ + + Quotes a name for being used as a schemaname + + Name of the schema + A Quoted name in the format of OpenQuote + schemaName + CloseQuote + +

+ If the schemaName is already enclosed in the OpenQuote and CloseQuote then this + method will return the schemaName that was passed in without going through any + Quoting process. So if schemaName is passed in already Quoted make sure that + you have escaped all of the chars according to your DataBase's specifications. +

+
+
+ + + Unquotes and unescapes an already quoted name + + Quoted string + Unquoted string + +

+ This method checks the string quoted to see if it is + quoted. If the string quoted is already enclosed in the OpenQuote + and CloseQuote then those chars are removed. +

+

+ After the OpenQuote and CloseQuote have been cleaned from the string quoted + then any chars in the string quoted that have been escaped by doubling them + up are changed back to a single version. +

+

+ The following quoted values return these results + "quoted" = quoted + "quote""d" = quote"d + quote""d = quote"d +

+

+ If this implementation is not sufficient for your Dialect then it needs to be overridden. + MsSql2000Dialect is an example of where UnQuoting rules are different. +

+
+
+ + + Unquotes an array of Quoted Names. + + strings to Unquote + an array of unquoted strings. + + This use UnQuote(string) for each string in the quoted array so + it should not need to be overridden - only UnQuote(string) needs + to be overridden unless this implementation is not sufficient. + + + + + Given a type code, determine an appropriate + null value to use in a select clause. + + The type code. + The appropriate select clause value fragment. + + One thing to consider here is that certain databases might + require proper casting for the nulls here since the select here + will be part of a UNION/UNION ALL. + + + + + Build an instance of the preferred by this dialect for + converting into NHibernate's ADOException hierarchy. + + The Dialect's preferred . + + The default Dialect implementation simply returns a converter based on X/Open SQLState codes. + + It is strongly recommended that specific Dialect implementations override this + method, since interpretation of a SQL error is much more accurate when based on + the ErrorCode rather than the SQLState. Unfortunately, the ErrorCode is a vendor-specific approach. + + + + + Retrieve a set of default Hibernate properties for this database. + + + + + Aggregate SQL functions as defined in general. This is + a case-insensitive hashtable! + + + The results of this method should be integrated with the + specialization's data. + + + + + The class (which implements ) + which acts as this dialects native generation strategy. + + The native generator class. + + Comes into play whenever the user specifies the native generator. + + + + + The keyword used to insert a generated value into an identity column (or null). + Need if the dialect does not support inserts that specify no column values. + + + + Get the select command used retrieve the names of all sequences. + The select command; or null if sequences are not supported. + + + + Get the command used to select a GUID from the underlying database. + (Optional operation.) + + The appropriate command. + + + Command used to create a table. + + + + Slight variation on . + The command used to create a multiset table. + + + Here, we have the command used to create a table when there is no primary key and + duplicate rows are expected. +

+ Most databases do not care about the distinction; originally added for + Teradata support which does care. + + + +

Command used to create a temporary table. +
+ + + Get any fragments needing to be postfixed to the command for + temporary table creation. + + + + + Should the value returned by + be treated as callable. Typically this indicates that JDBC escape + sytnax is being used... + + + + + Retrieve the command used to retrieve the current timestammp from the database. + + + + + The name of the database-specific SQL function for retrieving the + current timestamp. + + + + + The keyword used to insert a row without specifying any column values + + + + + The name of the SQL function that transforms a string to lowercase + + + + + The syntax used to add a column to a table. Note this is deprecated + + + + + The keyword used to specify a nullable column + + + + + Completely optional cascading drop clause + + + + + Does this dialect support the ALTER TABLE syntax? + + + + + Do we need to drop constraints before dropping tables in the dialect? + + + + + Do we need to qualify index names with the schema name? + + + + + Does this dialect support the UNIQUE column syntax? + + + + Does this dialect support adding Unique constraints via create and alter table ? + + + + Does the dialect support the syntax 'drop table if exists NAME' + + + + + Does the dialect support the syntax 'drop table NAME if exists' + + + + Does this dialect support column-level check constraints? + True if column-level CHECK constraints are supported; false otherwise. + + + Does this dialect support table-level check constraints? + True if table-level CHECK constraints are supported; false otherwise. + + + + Get the string to append to SELECT statements to acquire locks + for this dialect. + + The appropriate FOR UPDATE clause string. + + + Is FOR UPDATE OF syntax supported? + True if the database supports FOR UPDATE OF syntax; false otherwise. + + + + Does this dialect support FOR UPDATE in conjunction with outer joined rows? + + True if outer joined rows can be locked via FOR UPDATE. + + + + Retrieves the FOR UPDATE NOWAIT syntax specific to this dialect + + The appropriate FOR UPDATE NOWAIT clause string. + + + Does this dialect support temporary tables? + + + Does this dialect support a way to retrieve the database's current timestamp value? + + + + Gives the best resolution that the database can use for storing + date/time values, in ticks. + + + + For example, if the database can store values with 100-nanosecond + precision, this property is equal to 1L. If the database can only + store values with 1-millisecond precision, this property is equal + to 10000L (number of ticks in a millisecond). + + + Used in TimestampType. + + + + + + Does this dialect support subselects? + + + + + How we seperate the queries when we use multiply queries. + + + + + Does this dialect support identity column key generation? + + + + + Does the dialect support some form of inserting and selecting + the generated IDENTITY value all in the same statement. + + + + + Whether this dialect has an identity clause added to the data type or a + completely seperate identity data type. + + + + + Get the select command to use to retrieve the last generated IDENTITY value. + + The appropriate select command + + + + The keyword used to specify an identity column, if native key generation is supported + + + + + Does this dialect support sequences? + + + + + Does this dialect support "pooled" sequences. Not aware of a better + name for this. Essentially can we specify the initial and increment values? + + True if such "pooled" sequences are supported; false otherwise. + + + + + + Does this Dialect have some kind of LIMIT syntax? + + False, unless overridden. + + + + Does this Dialect support an offset? + + + + + Can parameters be used for a statement containing a LIMIT? + + + + + Does the LIMIT clause specify arguments in the "reverse" order + limit, offset instead of offset, limit? + + False, unless overridden. + Inheritors should return true if the correct order is limit, offset + + + + Does the LIMIT clause come at the start of the + SELECT statement rather than at the end? + + false, unless overridden + + + + Does the LIMIT clause take a "maximum" row number instead + of a total number of returned rows? + + True if limit is relative from offset; false otherwise. + + This is easiest understood via an example. Consider you have a table + with 20 rows, but you only want to retrieve rows number 11 through 20. + Generally, a limit with offset would say that the offset = 11 and the + limit = 10 (we only want 10 rows at a time); this is specifying the + total number of returned rows. Some dialects require that we instead + specify offset = 11 and limit = 20, where 20 is the "last" row we want + relative to offset (i.e. total number of rows = 20 - 11 = 9) + So essentially, is limit relative from offset? Or is limit absolute? + + + + + The opening quote for a quoted identifier. + + + + + The closing quote for a quoted identifier. + + + + + Does this dialect support UNION ALL, which is generally a faster variant of UNION? + True if UNION ALL is supported; false otherwise. + + + + + Does this dialect support empty IN lists? + For example, is [where XYZ in ()] a supported construct? + + True if empty in lists are supported; false otherwise. + + + + Are string comparisons implicitly case insensitive. + In other words, does [where 'XYZ' = 'xyz'] resolve to true? + + True if comparisons are case insensitive. + + + + Is this dialect known to support what ANSI-SQL terms "row value + constructor" syntax; sometimes called tuple syntax. +

+ Basically, does it support syntax like + "... where (FIRST_NAME, LAST_NAME) = ('Steve', 'Ebersole') ...". +

+ + True if this SQL dialect is known to support "row value + constructor" syntax; false otherwise. + +
+ + + If the dialect supports {@link #supportsRowValueConstructorSyntax() row values}, + does it offer such support in IN lists as well? +

+ For example, "... where (FIRST_NAME, LAST_NAME) IN ( (?, ?), (?, ?) ) ..." +

+ + True if this SQL dialect is known to support "row value + constructor" syntax in the IN list; false otherwise. + +
+ + + Should LOBs (both BLOB and CLOB) be bound using stream operations (i.e. + {@link java.sql.PreparedStatement#setBinaryStream}). + + True if BLOBs and CLOBs should be bound using stream operations. + + + + Does this dialect support parameters within the select clause of + INSERT ... SELECT ... statements? + + True if this is supported; false otherwise. + + + + Does this dialect support asking the result set its positioning + information on forward only cursors. Specifically, in the case of + scrolling fetches, Hibernate needs to use + {@link java.sql.ResultSet#isAfterLast} and + {@link java.sql.ResultSet#isBeforeFirst}. Certain drivers do not + allow access to these methods for forward only cursors. +

+ NOTE : this is highly driver dependent! +

+ + True if methods like {@link java.sql.ResultSet#isAfterLast} and + {@link java.sql.ResultSet#isBeforeFirst} are supported for forward + only cursors; false otherwise. + +
+ + + Does this dialect support definition of cascade delete constraints + which can cause circular chains? + + True if circular cascade delete constraints are supported; false otherwise. + + + + Are subselects supported as the left-hand-side (LHS) of + IN-predicates. + + In other words, is syntax like "... {subquery} IN (1, 2, 3) ..." supported? + + True if subselects can appear as the LHS of an in-predicate;false otherwise. + + + + Expected LOB usage pattern is such that I can perform an insert + via prepared statement with a parameter binding for a LOB value + without crazy casting to JDBC driver implementation-specific classes... +

+ Part of the trickiness here is the fact that this is largely + driver dependent. For example, Oracle (which is notoriously bad with + LOB support in their drivers historically) actually does a pretty good + job with LOB support as of the 10.2.x versions of their drivers... +

+ + True if normal LOB usage patterns can be used with this driver; + false if driver-specific hookiness needs to be applied. + +
+ + Does the dialect support propogating changes to LOB + values back to the database? Talking about mutating the + internal value of the locator as opposed to supplying a new + locator instance... +

+ For BLOBs, the internal value might be changed by: + {@link java.sql.Blob#setBinaryStream}, + {@link java.sql.Blob#setBytes(long, byte[])}, + {@link java.sql.Blob#setBytes(long, byte[], int, int)}, + or {@link java.sql.Blob#truncate(long)}. +

+ For CLOBs, the internal value might be changed by: + {@link java.sql.Clob#setAsciiStream(long)}, + {@link java.sql.Clob#setCharacterStream(long)}, + {@link java.sql.Clob#setString(long, String)}, + {@link java.sql.Clob#setString(long, String, int, int)}, + or {@link java.sql.Clob#truncate(long)}. +

+ NOTE : I do not know the correct answer currently for + databases which (1) are not part of the cruise control process + or (2) do not {@link #supportsExpectedLobUsagePattern}. +

+ True if the changes are propogated back to the database; false otherwise. +
+ + + Is it supported to materialize a LOB locator outside the transaction in + which it was created? +

+ Again, part of the trickiness here is the fact that this is largely + driver dependent. +

+ NOTE: all database I have tested which {@link #supportsExpectedLobUsagePattern()} + also support the ability to materialize a LOB outside the owning transaction... +

+ True if unbounded materialization is supported; false otherwise. +
+ + + Does this dialect support referencing the table being mutated in + a subquery. The "table being mutated" is the table referenced in + an UPDATE or a DELETE query. And so can that table then be + referenced in a subquery of said UPDATE/DELETE query. +

+ For example, would the following two syntaxes be supported:

    +
  • delete from TABLE_A where ID not in ( select ID from TABLE_A )
  • +
  • update TABLE_A set NON_ID = 'something' where ID in ( select ID from TABLE_A)
  • +
+
+ True if this dialect allows references the mutating table from a subquery. +
+ + Does the dialect support an exists statement in the select clause? + True if exists checks are allowed in the select clause; false otherwise. + + + + For the underlying database, is READ_COMMITTED isolation implemented by + forcing readers to wait for write locks to be released? + + True if writers block readers to achieve READ_COMMITTED; false otherwise. + + + + For the underlying database, is REPEATABLE_READ isolation implemented by + forcing writers to wait for read locks to be released? + + True if readers block writers to achieve REPEATABLE_READ; false otherwise. + + + + Does this dialect support using a JDBC bind parameter as an argument + to a function or procedure call? + + True if the database supports accepting bind params as args; false otherwise. + + + + Defines a contract for implementations that can extract the name of a violated + constraint from a SQLException that is the result of that constraint violation. + + + + + Extract the name of the violated constraint from the given SQLException. + + The exception that was the result of the constraint violation. + The extracted constraint name. + + + + + + + + + + + + + + + + Add a LIMIT clause to the given SQL SELECT + + A Query in the form of a SqlString. + Offset of the first row is not zero + A new SqlString that contains the LIMIT clause. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Summary description for FirebirdDialect. + + + The FirebirdDialect defaults the following configuration properties: + + + Property + Default Value + + + connection.driver_class + + + + + + + + Add a FIRST x [SKIP] y clause to the given SQL SELECT + + A Query in the form of a SqlString. + Maximum number of rows to be returned by the query + Offset of the first row to process in the result set + A new SqlString that contains the FIRST clause. + + + + + + + A generic SQL dialect which may or may not work on any actual databases + + + + + + + + + + + Summary description for InformixDialect. + + + The InformixDialect defaults the following configuration properties: + + + Property + Default Value + + + connection.driver_class + + + + + + + + + + + + + + The syntax that returns the identity value of the last insert, if native + key generation is supported + + + + + The keyword used to specify an identity column, if native key generation is supported + + + + + Whether this dialect have an Identity clause added to the data type or a + completely seperate identity data type + + + + + An SQL dialect for IngresSQL. + + + The IngresDialect defaults the following configuration properties: + + + Property + Default Value + + + use_outer_join + + + + connection.driver_class + + + + + + + + An SQL dialect compatible with Microsoft SQL Server 2000. + + + The MsSql2000Dialect defaults the following configuration properties: + + + Property + Default Value + + + use_outer_join + + + + connection.driver_class + + + + prepare_sql + + + + + + + + + + + Generates the string to drop the table using SQL Server syntax. + + The name of the table to drop. + The SQL with the inserted. + + + + Add a LIMIT (TOP) clause to the given SQL SELECT + + A Query in the form of a SqlString. + Maximum number of rows to be returned by the query + Offset of the first row to process in the result set + A new SqlString that contains the LIMIT clause. + + + + + + + + + MsSql does not require the OpenQuote to be escaped as long as the first char + is an OpenQuote. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Does this Dialect have some kind of LIMIT syntax? + + True, we'll use the SELECT TOP nn syntax. + + + + Does this Dialect support an offset? + + + + + Can parameters be used for a statement containing a LIMIT? + + + + + Does the LIMIT clause take a "maximum" row number + instead of a total number of returned rows? + + false, unless overridden + + + + Add a LIMIT clause to the given SQL SELECT + + The to base the limit query off of. + Offset of the first row to be returned by the query (zero-based) + Maximum number of rows to be returned by the query + A new with the LIMIT clause applied. + + The LIMIT SQL will look like + + + SELECT TOP last (columns) FROM ( + SELECT ROW_NUMBER() OVER(ORDER BY __hibernate_sort_expr_1__ {sort direction 1} [, __hibernate_sort_expr_2__ {sort direction 2}, ...]) as row, (query.columns) FROM ( + {original select query part}, {sort field 1} as __hibernate_sort_expr_1__ [, {sort field 2} as __hibernate_sort_expr_2__, ...] + {remainder of original query minus the order by clause} + ) query + ) page WHERE page.row > offset + + + + Note that we need to add explicitly specify the columns, because we need to be able to use them + in a paged subselect. NH-1155 + + + + + Sql Server 2005 supports a query statement that provides LIMIT + functionality. + + true + + + + Sql Server 2005 supports a query statement that provides LIMIT + functionality with an offset. + + true + + + + Sql Server 2005 supports a query statement that provides LIMIT + functionality with an offset. + + false + + + + This specialized string tokenizier will break a string to tokens, taking + into account single quotes, parenthesis and commas and [ ] + Notice that we aren't differenciating between [ ) and ( ] on purpose, it would complicate + the code and it is not legal at any rate. + + + + + An SQL dialect compatible with Microsoft SQL Server 7. + + + There have been no test run with this because the NHibernate team does not + have a machine with Sql 7 installed on it. But there have been users using + Ms Sql 7 with NHibernate. As issues with Ms Sql 7 and NHibernate become known + this Dialect will be updated. + + + + + Uses @@identity to get the Id value. + + + There is a well known problem with @@identity and triggers that insert into + rows into other tables that also use an identity column. The only way I know + of to get around this problem is to upgrade your database server to Ms Sql 2000. + + + + + A dialect for SQL Server Everywhere (SQL Server CE). + + + + + A SQL dialect for MySQL + + + The MySQLDialect defaults the following configuration properties: + + + Property + Default Value + + + use_outer_join + + + + connection.driver_class + + + + + + + + + + + + + + + + + + + Create the SQL string to drop a foreign key constraint. + + The name of the foreign key to drop. + The SQL string to drop the foreign key constraint. + + + + Create the SQL string to drop a primary key constraint. + + The name of the primary key to drop. + The SQL string to drop the primary key constraint. + + + + Create the SQL string to drop an index. + + The name of the index to drop. + The SQL string to drop the index constraint. + + + + + + + + + + + + + + + + + + + + + + + + + + + + It's a immature version, it just work. + An SQL dialect for Oracle 9 + + + The Oracle9Dialect defaults the following configuration properties: + + + Property + Default Value + + + use_outer_join + + + + connection.driver_class + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + An SQL dialect for Oracle, compatible with Oracle 8. + + + + + + + + + + + + + + An SQL dialect for PostgreSQL 8.1 and above. + + + + PostgreSQL 8.1 supports FOR UPDATE ... NOWAIT syntax. + + + PostgreSQL supports Identity column using the "SERIAL" type. + Serial type is a "virtual" type that will automatically: + + + Create a sequence named tablename_colname_seq. + Set the default value of this column to the next value of the + sequence. (using function nextval('tablename_colname_seq')) + Add a "NOT NULL" constraint to this column. + Set the sequence as "owned by" the table. + + + To insert the next value of the sequence into the serial column, + exclude the column from the list of columns + in the INSERT statement or use the DEFAULT key word. + + + If the table or the column is dropped, the sequence is dropped too. + + + + + + + An SQL dialect for PostgreSQL. + + + The PostgreSQLDialect defaults the following configuration properties: + + + Property + Default Value + + + use_outer_join + + + + connection.driver_class + + + + + + + + + + + + + + Offset of the first row to process in the result set is non-zero + + + + + + + + + + + PostgreSQL supports Identity column using the "SERIAL" type. + + + + + PostgreSQL doesn't have type in identity column. + + + To create an identity column it uses the SQL syntax + CREATE TABLE tablename (colname SERIAL); or + CREATE TABLE tablename (colname BIGSERIAL); + + + + + PostgreSQL supports serial and serial4 type for 4 bytes integer auto increment column. + bigserial or serial8 can be used for 8 bytes integer auto increment column. + This dialect uses serial + + + + + The sql syntax to insert a row without specifying any column in PostgreSQL is + INSERT INTO table DEFAULT VALUES; + + + + + PostgreSQL 8.1 and above defined the fuction lastval() that returns the + value of the last sequence that nextval() was used on in the current session. + Call lastval() if nextval() has not yet been called in the current + session throw an exception. + + + + + An SQL dialect for PostgreSQL 8.2 and above. + + + PostgreSQL 8.2 supports DROP TABLE IF EXISTS tablename + and DROP SEQUENCE IF EXISTS sequencename syntax. + See for more information. + + + + + A SQL dialect for SQLite. + + +

+ Author: Ioan Bizau +

+
+
+ + + + + + + + + + + + + This is a subclass of SybaseDialect for sybase 11 databases (specifically tested against 11.9.2). 11.9.2 does not support ANSI JOINs + therefore we have to provide a special join fragment for left/right joins (*= and =* respectively). + + + + + An SQL dialect compatible with Sybase. + + +

+ This dialect probably will not work with schema-export. If anyone out there + can fill in the ctor with DbTypes to Strings that would be helpful. +

+ The SybaseDialect defaults the following configuration properties: + + + Property + Default Value + + + use_outer_join + + + + connection.driver_class + + + + prepare_sql + + + +
+
+ + + + + + Sybase does not support quoted aliases, this function thus returns + aliasName as is. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + This class is basically a port of the hibernate 3.2 Sybase 11 join fragment. It usees concepts from that join fragment and the Oracle join fragment in NHibernate + + + + + Represents a SQL JOIN + + + + + An SQL dialect for Sybase Adaptive Server Anywhere 9.0 + + +

+ This dialect probably will not work with schema-export. If anyone out there + can fill in the ctor with DbTypes to Strings that would be helpful. +

+ The SybaseAnywhereDialect defaults the following configuration properties: + + + Property + Default Value + + + use_outer_join + + + + connection.driver_class + + + + prepare_sql + + + +
+
+ + + + + + + + + + + + ASA does not require to drop constraint before dropping tables, and DROP statement + syntax used by Hibernate to drop constraint is not compatible with ASA, so disable it. + Comments matchs SybaseAnywhereDialect from Hibernate-3.1 src + + + + + This class maps a DbType to names. + + + Associations may be marked with a capacity. Calling the Get() + method with a type and actual size n will return the associated + name with smallest capacity >= n, if available and an unmarked + default type otherwise. + Eg, setting + + Names.Put(DbType, "TEXT" ); + Names.Put(DbType, 255, "VARCHAR($l)" ); + Names.Put(DbType, 65534, "LONGVARCHAR($l)" ); + + will give you back the following: + + Names.Get(DbType) // --> "TEXT" (default) + Names.Get(DbType,100) // --> "VARCHAR(100)" (100 is in [0:255]) + Names.Get(DbType,1000) // --> "LONGVARCHAR(1000)" (100 is in [256:65534]) + Names.Get(DbType,100000) // --> "TEXT" (default) + + On the other hand, simply putting + + Names.Put(DbType, "VARCHAR($l)" ); + + would result in + + Names.Get(DbType) // --> "VARCHAR($l)" (will cause trouble) + Names.Get(DbType,100) // --> "VARCHAR(100)" + Names.Get(DbType,1000) // --> "VARCHAR(1000)" + Names.Get(DbType,10000) // --> "VARCHAR(10000)" + + + + + + Get default type name for specified type + + the type key + the default type name associated with the specified key + + + + Get the type name specified type and size + + the type key + the SQL length + the SQL scale + the SQL precision + + The associated name with smallest capacity >= size if available and the + default type name otherwise + + + + + Set a type name for specified type key and capacity + + the type key + the (maximum) type size/length + The associated name + + + + + + + + + + + The ASAClientDriver Driver provides a database driver for Adaptive Server Anywhere 9.0. + + + + + Base class for the implementation of IDriver + + + + + A strategy for describing how NHibernate should interact with the different .NET Data + Providers. + + + + The IDriver interface is not intended to be exposed to the application. + Instead it is used internally by NHibernate to obtain connection objects, command objects, and + to generate and prepare IDbCommands. Implementors should provide a + public default constructor. + + + This is the interface to implement, or you can inherit from + if you have an ADO.NET data provider that NHibernate does not have built in support for. + To use the driver, NHibernate property connection.driver_class should be + set to the assembly-qualified name of the driver class. + + + key="connection.driver_class" + value="FullyQualifiedClassName, AssemblyName" + + + + + + Configure the driver using . + + + + + Creates an uninitialized IDbConnection object for the specific Driver + + + + + Generates an IDbCommand from the SqlString according to the requirements of the DataProvider. + + The of the command to generate. + The SqlString that contains the SQL. + The types of the parameters to generate for the command. + An IDbCommand with the CommandText and Parameters fully set. + + + + Prepare the by calling . + May be a no-op if the driver does not support preparing commands, or for any other reason. + + + + + + Does this Driver support having more than 1 open IDataReader with + the same IDbConnection. + + + + A value of indicates that an exception would be thrown if NHibernate + attempted to have 2 IDataReaders open using the same IDbConnection. NHibernate + (since this version is a close to straight port of Hibernate) relies on the + ability to recursively open 2 IDataReaders. If the Driver does not support it + then NHibernate will read the values from the IDataReader into an . + + + A value of will result in greater performance because an IDataReader can be used + instead of the . So if the Driver supports it then make sure + it is set to . + + + + + + Can we issue several select queries in a single query, and get + several result sets back? + + + + + Change the parameterName into the correct format IDbCommand.CommandText + for the ConnectionProvider + + The unformatted name of the parameter + A parameter formatted for an IDbCommand.CommandText + + + + Changes the parameterName into the correct format for an IDbParameter + for the Driver. + + + For SqlServerConnectionProvider it will change id to @id + + The unformatted name of the parameter + A parameter formatted for an IDbParameter. + + + + Generates an IDbDataParameter for the IDbCommand. It does not add the IDbDataParameter to the IDbCommand's + Parameter collection. + + The IDbCommand to use to create the IDbDataParameter. + The name to set for IDbDataParameter.Name + The SqlType to set for IDbDataParameter. + An IDbDataParameter ready to be added to an IDbCommand. + + + + Does this Driver require the use of a Named Prefix in the SQL statement. + + + For example, SqlClient requires select * from simple where simple_id = @simple_id + If this is false, like with the OleDb provider, then it is assumed that + the ? can be a placeholder for the parameter in the SQL statement. + + + + + Does this Driver require the use of the Named Prefix when trying + to reference the Parameter in the Command's Parameter collection. + + + This is really only useful when the UseNamedPrefixInSql == true. When this is true the + code will look like: + IDbParameter param = cmd.Parameters["@paramName"] + if this is false the code will be + IDbParameter param = cmd.Parameters["paramName"]. + + + + + The Named Prefix for parameters. + + + Sql Server uses "@" and Oracle uses ":". + + + + + Does this Driver support IDbCommand.Prepare(). + + + + A value of indicates that an exception would be thrown or the + company that produces the Driver we are wrapping does not recommend using + IDbCommand.Prepare(). + + + A value of indicates that calling IDbCommand.Prepare() will function + fine on this Driver. + + + + + + Initializes a new instance of with + type names that are loaded from the specified assembly. + + Assembly to load the types from. + Connection type name. + Command type name. + + + + Initializes a new instance of the class. + + + Thrown when the ASA.Data.AseClient assembly is not and can not be loaded. + + + + + iAnywhere.Data.AsaClient uses named parameters in the sql. + + - Sybase uses String.Empty in the sql. + + + + iAnywhere.Data.AsaClient use the string.Empty to locate parameters in sql. + + + + + A NHibernate Driver for using the IBM.Data.DB2.iSeries DataProvider. + + + + + Initializes a new instance of the class. + + + Thrown when the IBM.Data.DB2.iSeries assembly can not be loaded. + + + + + A NHibernate Driver for using the IBM.Data.DB2 DataProvider. + + + + + Initializes a new instance of the class. + + + Thrown when the IBM.Data.DB2 assembly can not be loaded. + + + + + A NHibernate Driver for using the Firebird data provider located in + FirebirdSql.Data.FirebirdClient assembly. + + + + + Initializes a new instance of the class. + + + Thrown when the FirebirdSql.Data.Firebird assembly can not be loaded. + + + + + A NHibernate Driver for using the FirebirdSql.Data.Firebird DataProvider. + + + + + Initializes a new instance of the class. + + + Thrown when the FirebirdSql.Data.Firebird assembly can not be loaded. + + + + + A NHibernate Driver for using the Ingres DataProvider + + + + + + + + + + + + + + + + + + + Provides a database driver for MySQL. + + + + In order to use this driver you must have the assembly MySql.Data.dll available for + NHibernate to load, including its dependencies (ICSharpCode.SharpZipLib.dll is required by + the assembly MySql.Data.dll as of the time of this writing). + + + Please check the product's website + for any updates and/or documentation regarding MySQL. + + + + + + Initializes a new instance of the class. + + + Thrown when the MySql.Data assembly can not be loaded. + + + + + MySql.Data uses named parameters in the sql. + + - MySql uses ? in the sql. + + + + + + + MySql.Data use the ? to locate parameters in sql. + + ? is used to locate parameters in sql. + + + + The MySql.Data driver does NOT support more than 1 open IDataReader + with only 1 IDbConnection. + + - it is not supported. + + + + MySql.Data does not support preparing of commands. + + - it is not supported. + + With the Gamma MySql.Data provider it is throwing an exception with the + message "Expected End of data packet" when a select command is prepared. + + + + + Some Data Providers (ie - SqlClient) do not support Multiple Active Result Sets (MARS). + NHibernate relies on being able to create MARS to read Components and entities inside + of Collections. + + + This is a completely off-line DataReader - the underlying IDataReader that was used to create + this has been closed and no connections to the Db exists. + + + + + Creates a NDataReader from a + + The to get the records from the Database. + if we are loading the in the middle of reading it. + + NHibernate attempts to not have to read the contents of an into memory until it absolutely + has to. What that means is that it might have processed some records from the and will + pick up the midstream so that the underlying can be closed + so a new one can be opened. + + + + + Sets the values that can be cached back to null and sets the + index of the cached column to -1 + + + + + + + + + + + + + + + + + Takes care of freeing the managed and unmanaged resources that + this class is responsible for. + + + There are not any unmanaged resources or any disposable managed + resources that this class is holding onto. It is in here + to comply with the interface. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Stores a Result from a DataReader in memory. + + + + + Initializes a new instance of the NResult class. + + The IDataReader to populate the Result with. + + if the is already positioned on the record + to start reading from. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + An implementation of that will work with either an + returned by Execute or with an + whose contents have been read into a . + + + + This allows NHibernate to use the underlying for as long as + possible without the need to read everything into the . + + + The consumer of the returned from does + not need to know the underlying reader and can use it the same even if it switches from an + to in the middle of its use. + + + + + + Initializes a new instance of the class. + + The underlying IDataReader to use. + + + + Initializes a new instance of the NHybridDataReader class. + + The underlying IDataReader to use. + if the contents of the IDataReader should be read into memory right away. + + + + Reads all of the contents into memory because another + needs to be opened. + + + This will result in a no op if the reader is closed or is already in memory. + + + + + + + + + + + + + + + + + A flag to indicate if Disose() has been called. + + + + + Finalizer that ensures the object is correctly disposed of. + + + + + Takes care of freeing the managed and unmanaged resources that + this class is responsible for. + + + + + Takes care of freeing the managed and unmanaged resources that + this class is responsible for. + + Indicates if this NHybridDataReader is being Disposed of or Finalized. + + If this NHybridDataReader is being Finalized (isDisposing==false) then make sure not + to call any methods that could potentially bring this NHybridDataReader back to life. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Gets if the object is in the middle of reading a Result. + + if NextResult and Read have been called on the . + + + + + + + + + + + + + + + + + + + + + + The PostgreSQL data provider provides a database driver for PostgreSQL. +

+ Author: Oliver Weichhold +

+
+ +

+ In order to use this Driver you must have the Npgsql.dll Assembly available for + NHibernate to load it. +

+

+ Please check the products website + http://www.postgresql.org/ + for any updates and or documentation. +

+

+ The homepage for the .NET DataProvider is: + http://pgfoundry.org/projects/npgsql. +

+
+
+ + + Initializes a new instance of the class. + + + Thrown when the Npgsql assembly can not be loaded. + + + + + A NHibernate Driver for using the Odbc DataProvider + + + Always look for a native .NET DataProvider before using the Odbc DataProvider. + + + + + A NHibernate Driver for using the OleDb DataProvider + + + Always look for a native .NET DataProvider before using the OleDb DataProvider. + + + + + OLE DB provider does not support multiple open data readers + + + + + A NHibernate Driver for using the Oracle DataProvider. + + + + + A NHibernate Driver for using the Oracle.DataAccess DataProvider + + + Code was contributed by James Mills + on the NHibernate forums in this + post. + + + + + Initializes a new instance of . + + + Thrown when the Oracle.DataAccess assembly can not be loaded. + + + + + This adds logic to ensure that a DbType.Boolean parameter is not created since + ODP.NET doesn't support it. + + + + + + + + + + + + + + A NHibernate Driver for using the SqlClient DataProvider + + + + + Creates an uninitialized object for + the SqlClientDriver. + + An unitialized object. + + + + Creates an uninitialized object for + the SqlClientDriver. + + An unitialized object. + + + + MsSql requires the use of a Named Prefix in the SQL statement. + + + because MsSql uses "@". + + + + + MsSql requires the use of a Named Prefix in the Parameter. + + + because MsSql uses "@". + + + + + The Named Prefix for parameters. + + + Sql Server uses "@". + + + + + The SqlClient driver does NOT support more than 1 open IDataReader + with only 1 IDbConnection. + + - it is not supported. + + MS SQL Server 2000 (and 7) throws an exception when multiple IDataReaders are + attempted to be opened. When SQL Server 2005 comes out a new driver will be + created for it because SQL Server 2005 is supposed to support it. + + + + + NHibernate driver for the System.Data.SQLite data provider for .NET 2.0. + + +

+ In order to use this driver you must have the System.Data.SQLite.dll assembly available + for NHibernate to load. This assembly includes the SQLite.dll or SQLite3.dll libraries. +

+

+ You can get the System.Data.SQLite.dll assembly from http://sourceforge.net/projects/sqlite-dotnet2. +

+

+ Please check http://www.sqlite.org/ for more information regarding SQLite. +

+
+
+ + + Initializes a new instance of . + + + Thrown when the SQLite.NET assembly can not be loaded. + + + + + NHibernate driver for the SQLite.NET data provider. +

+ Author: Ioan Bizau +

+
+ +

+ In order to use this Driver you must have the SQLite.NET.dll Assembly available for NHibernate to load it. + You must also have the SQLite.dll and SQLite3.dll libraries. +

+

+ Please check http://www.sqlite.org/ for more information regarding SQLite. +

+
+
+ + + Initializes a new instance of . + + + Thrown when the SQLite.NET assembly can not be loaded. + + + + + A NHibernate driver for Microsoft SQL Server CE data provider + + + + + Initializes a new instance of the class. + + + + + MsSql requires the use of a Named Prefix in the SQL statement. + + + because MsSql uses "@". + + + + + MsSql requires the use of a Named Prefix in the Parameter. + + + because MsSql uses "@". + + + + + The Named Prefix for parameters. + + + Sql Server uses "@". + + + + + The SqlClient driver does NOT support more than 1 open IDataReader + with only 1 IDbConnection. + + - it is not supported. + + Ms Sql 2000 (and 7) throws an Exception when multiple DataReaders are + attempted to be Opened. When Yukon comes out a new Driver will be + created for Yukon because it is supposed to support it. + + + + + The SybaseClientDriver Driver provides a database driver for Sybase. + + + It has been reported to work with the . + + + + + Initializes a new instance of the class. + + + Thrown when the Sybase.Data.AseClient assembly can not be loaded. + + + + + Sybase.Data.AseClient uses named parameters in the sql. + + - Sybase uses @ in the sql. + + + + + + + Sybase.Data.AseClient use the @ to locate parameters in sql. + + @ is used to locate parameters in sql. + + + + Represents state associated with the processing of a given + in regards to loading collections. + + + Another implementation option to consider is to not expose ResultSets + directly (in the JDBC redesign) but to always "wrap" them and apply a [series of] context[s] to that wrapper. + + + + + Creates a collection load context for the given result set. + + Callback to other collection load contexts. + The result set this is "wrapping". + + + + Retrieve the collection that is being loaded as part of processing this result set. + + The persister for the collection being requested. + The key of the collection being requested. + The loading collection (see discussion above). + + Basically, there are two valid return values from this method:
    +
  • an instance of {@link PersistentCollection} which indicates to + continue loading the result set row data into that returned collection + instance; this may be either an instance already associated and in the + midst of being loaded, or a newly instantiated instance as a matching + associated collection was not found.
  • +
  • null indicates to ignore the corresponding result set row + data relating to the requested collection; this indicates that either + the collection was found to already be associated with the persistence + context in a fully loaded state, or it was found in a loading state + associated with another result set processing context.
  • +
+
+
+ + + Finish the process of collection-loading for this bound result set. Mainly this + involves cleaning up resources and notifying the collections that loading is + complete. + + The persister for which to complete loading. + + + Add the collection to the second-level cache + The entry representing the collection to add + The persister + + + + Maps to specific contextual data + related to processing that . + + + Implementation note: internally an is used to maintain + the mappings; was chosen because I'd rather not be + dependent upon potentially bad and + implementations. + Considering the JDBC-redesign work, would further like this contextual info + not mapped seperately, but available based on the result set being processed. + This would also allow maintaining a single mapping as we could reliably get + notification of the result-set closing... + + + + Creates and binds this to the given persistence context. + The persistence context to which this will be bound. + + + + Release internal state associated with the given result set. + + The result set for which it is ok to release associated resources. + + This should be called when we are done with processing said result set, + ideally as the result set is being closed. + + + + Release internal state associated with *all* result sets. + + This is intended as a "failsafe" process to make sure we get everything + cleaned up and released. + + + + + Get the {@link CollectionLoadContext} associated with the given + {@link ResultSet}, creating one if needed. + + The result set for which to retrieve the context. + The processing context. + + + + Attempt to locate the loading collection given the owner's key. The lookup here + occurs against all result-set contexts... + + The collection persister + The owner key + The loading collection, or null if not found. + + + + Register a loading collection xref. + + The xref collection key + The corresponding loading collection entry + + This xref map is used because sometimes a collection is in process of + being loaded from one result set, but needs to be accessed from the + context of another "nested" result set processing. + Implementation note: package protected, as this is meant solely for use + by {@link CollectionLoadContext} to be able to locate collections + being loaded by other {@link CollectionLoadContext}s/{@link ResultSet}s. + + + + + The inverse of {@link #registerLoadingCollectionXRef}. Here, we are done + processing the said collection entry, so we remove it from the + load context. + + The key of the collection we are done processing. + + The idea here is that other loading collections can now reference said + collection directly from the {@link PersistenceContext} because it + has completed its load cycle. + Implementation note: package protected, as this is meant solely for use + by {@link CollectionLoadContext} to be able to locate collections + being loaded by other {@link CollectionLoadContext}s/{@link ResultSet}s. + + + + + Locate the LoadingCollectionEntry within *any* of the tracked + s. + + The collection key. + The located entry; or null. + + Implementation note: package protected, as this is meant solely for use + by to be able to locate collections + being loaded by other s/ResultSets. + + + + + Retrieves the persistence context to which this is bound. + + + + + Do we currently have any internal entries corresponding to loading + collections? + + True if we currently hold state pertaining to loading collections; false otherwise. + + + + Represents a collection currently being loaded. + + + + Describes a return in a native SQL query. + + + + Represents a return defined as part of a native sql query which + names a collection role in the form {classname}.{collectionrole}; it + is used in defining a custom sql query for loading an entity's + collection in non-fetching scenarios (i.e., loading the collection + itself as the "root" of the result). + + + + + Represents the base information for a non-scalar return defined as part of + a native sql query. + + + + Constructs some form of non-scalar return descriptor + The result alias + Any user-supplied column->property mappings + The lock mode to apply to the return. + + + Retrieve the defined result alias + + + Retrieve the lock-mode to apply to this return + + + Retrieve the user-supplied column->property mappings. + + + Construct a native-sql return representing a collection initializer + The result alias + + The entity-name of the entity owning the collection to be initialized. + + + The property name (on the owner) which represents + the collection to be initialized. + + Any user-supplied column->property mappings + The lock mode to apply to the collection. + + + + The class owning the collection. + + + + + The name of the property representing the collection from the . + + + + + Represents a return defined as part of a native sql query which + names a fetched role. + + + + Construct a return descriptor representing some form of fetch. + The result alias + The owner's result alias + The owner's property representing the thing to be fetched + Any user-supplied column->property mappings + The lock mode to apply + + + The alias of the owner of this fetched association. + + + + Retrieve the property name (relative to the owner) which maps to + the association to be fetched. + + + + + Represents a return defined as part of a native sql query which + names a "root" entity. A root entity means it is explicitly a + "column" in the result, as opposed to a fetched relationship or role. + + + + + Construct a return representing an entity returned at the root + of the result. + + The result alias + The entity name. + The lock mode to apply + + + + Construct a return representing an entity returned at the root + of the result. + + The result alias + The entity name. + Any user-supplied column->property mappings + The lock mode to apply + + + The name of the entity to be returned. + + + Describes a scalar return in a native SQL query. + + + + Extends an HQLQueryPlan to maintain a reference to the collection-role name + being filtered. + + + + Defines a query execution plan for an HQL query (or filter). + + + Descriptor regarding a named parameter. + + + + Not supported yet (AST parse needed) + + + + Defines a query execution plan for a native-SQL query. + + + + Bind positional parameter values to the PreparedStatement + (these are parameters specified by a JDBC-style ?). + + + + + Bind named parameters to the PreparedStatement. This has an + empty implementation on this superclass and should be implemented by + subclasses (queries) which allow named parameters. + + + + Encapsulates metadata about parameters encountered within a query. + + + + The single available method + is responsible for parsing a query string and recognizing tokens in + relation to parameters (either named, ejb3-style, or ordinal) and + providing callbacks about such recognitions. + + + + + Performs the actual parsing and tokenizing of the query string making appropriate + callbacks to the given recognizer upon recognition of the various tokens. + + + Note that currently, this only knows how to deal with a single output + parameter (for callable statements). If we later add support for + multiple output params, this, obviously, needs to change. + + The string to be parsed/tokenized. + The thing which handles recognition events. + + + + + Implements a parameter parser recognizer specifically for the purpose + of journaling parameter locations. + + + + + Convenience method for creating a param location recognizer and + initiating the parse. + + The query to be parsed for parameter locations. + The generated recognizer, with journaled location info. + + + + The dictionary of named parameter locations. + The dictionary is keyed by parameter name. + + + + + The list of ordinal parameter locations. + + + The list elements are integers, representing the location for that given ordinal. + Thus OrdinalParameterLocationList[n] represents the location for the nth parameter. + + + + Defines metadata regarding a translated HQL or native-SQL query. + + + Get the source HQL or native-SQL query. + + + Return source query select clause aliases (if any) + + + An array of types describing the returns of the source query. + + + The set of query spaces affected by this source query. + + + Acts as a cache for compiled query plans, as well as query-parameter metadata. + + + + Responsible for maintaining the queue of actions related to events. + + The ActionQueue holds the DML operations queued as part of a session's + transactional-write-behind semantics. DML operations are queued here + until a flush forces them to be executed against the database. + + + + + + Perform all currently queued entity-insertion actions. + + + + + Perform all currently queued actions. + + + + + Prepares the internal action queues for execution. + + + + + Performs cleanup of any held cache softlocks. + + Was the transaction successful. + + + + Check whether the given tables/query-spaces are to be executed against + given the currently queued actions. + + The table/query-spaces to check. + True if we contain pending actions against any of the given tables; false otherwise. + + + + Check whether any insertion or deletion actions are currently queued. + + True if insertions or deletions are currently queued; false otherwise. + + + + Identifies a named association belonging to a particular + entity instance. Used to record the fact that an association + is null during loading. + + + + + Defines a sequence of elements that are currently + eligible for batch fetching. + + + Even though this is a map, we only use the keys. A map was chosen in + order to utilize a to maintain sequencing + as well as uniqueness. + + + + + A map of subselect-fetch descriptors + keyed by the against which the descriptor is + registered. + + + + + The owning persistence context. + + + + + Constructs a queue for the given context. + + The owning persistence context. + + + + Clears all entries from this fetch queue. + + + + + Retrieve the fetch descriptor associated with the given entity key. + + The entity key for which to locate any defined subselect fetch. + The fetch descriptor; may return null if no subselect fetch queued for + this entity key. + + + + Adds a subselect fetch decriptor for the given entity key. + + The entity for which to register the subselect fetch. + The fetch descriptor. + + + + After evicting or deleting an entity, we don't need to + know the query that was used to load it anymore (don't + call this after loading the entity, since we might still + need to load its collections) + + + + + Clears all pending subselect fetches from the queue. + + + Called after flushing. + + + + + If an EntityKey represents a batch loadable entity, add + it to the queue. + + + Note that the contract here is such that any key passed in should + previously have been been checked for existence within the + ; failure to do so may cause the + referenced entity to be included in a batch even though it is + already associated with the . + + + + + After evicting or deleting or loading an entity, we don't + need to batch fetch it anymore, remove it from the queue + if necessary + + + + + Get a batch of uninitialized collection keys for a given role + + The persister for the collection role. + A key that must be included in the batch fetch + the maximum number of keys to return + an array of collection keys, of length batchSize (padded with nulls) + + + + Get a batch of unloaded identifiers for this class, using a slightly + complex algorithm that tries to grab keys registered immediately after + the given key. + + The persister for the entities being loaded. + The identifier of the entity currently demanding load. + The maximum number of keys to return + an array of identifiers, of length batchSize (possibly padded with nulls) + + + + The types of children to cascade to + + + + + A cascade point that occurs just after the insertion of the parent + entity and just before deletion + + + + + A cascade point that occurs just before the insertion of the parent entity + and just after deletion + + + + + A cascade point that occurs just after the insertion of the parent entity + and just before deletion, inside a collection + + + + + A cascade point that occurs just after the update of the parent entity + + + + A cascade point that occurs just before the session is flushed + + + + A cascade point that occurs just after eviction of the parent entity from the + session cache + + + + + A cascade point that occurs just after locking a transient parent entity into the + session cache + + + + + A cascade point that occurs just after locking a transient parent entity into the session cache + + + + + A cascade point that occurs just before merging from a transient parent entity into + the object in the session cache + + + + + Delegate responsible, in conjunction with the various + , for implementing cascade processing. + + + + Cascade an action from the parent entity instance to all its children. + The parent's entity persister + The parent reference. + + + + Cascade an action from the parent entity instance to all its children. This + form is typicaly called from within cascade actions. + + The parent's entity persister + The parent reference. + + Typically some form of cascade-local cache + which is specific to each CascadingAction type + + + + Cascade an action to the child or children + + + Cascade an action to a collection + + + Cascade an action to a to-one association or any type + + + Cascade to the collection elements + + + Delete any entities that were removed from the collection + + + A contract for defining the aspects of cascading various persistence actions. + + + + package-protected constructor + + + For this style, should the given action be cascaded? + The action to be checked for cascade-ability. + True if the action should be cascaded under this style; false otherwise. + + + + Probably more aptly named something like doCascadeToCollectionElements(); + it is however used from both the collection and to-one logic branches... + + The action to be checked for cascade-ability. + True if the action should be really cascaded under this style; false otherwise. + + For this style, should the given action really be cascaded? The default + implementation is simply to return {@link #doCascade}; for certain + styles (currently only delete-orphan), however, we need to be able to + control this seperately. + + + + Factory method for obtaining named cascade styles + The named cascade style name. + The appropriate CascadeStyle + + + save / delete / update / evict / lock / replicate / merge / persist + delete orphans + + + save / delete / update / evict / lock / replicate / merge / persist + + + save / update + + + lock + + + refresh + + + evict + + + replicate + + + merge + + + create + + + delete + + + delete + delete orphans + + + no cascades + + + Do we need to delete orphaned collection elements? + True if this style need to account for orphan delete operations; false othwerwise. + + + + A session action that may be cascaded from parent entity to its children + + + + Cascade the action to the child object. + The session within which the cascade is occuring. + The child to which cascading should be performed. + The child's entity name + Typically some form of cascade-local cache which is specific to each CascadingAction type + Are cascading deletes enabled. + + + + Given a collection, get an iterator of the children upon which the + current cascading action should be visited. + + The session within which the cascade is occuring. + The mapping type of the collection. + The collection instance. + The children iterator. + + + + Called (in the case of returning true) to validate + that no cascade on the given property is considered a valid semantic. + + The session witin which the cascade is occurring. + The property value + The property value owner + The entity persister for the owner + The index of the property within the owner. + + + + Given a collection, get an iterator of all its children, loading them + from the database if necessary. + + The session within which the cascade is occuring. + The mapping type of the collection. + The collection instance. + The children iterator. + + + + Iterate just the elements of the collection that are already there. Don't load + any new elements from the database. + + + + + + + + + + + + + + + + + + + + + + + + + + + + Execute persist during flush time + + + + + + + Does this action potentially extrapolate to orphan deletes? + True if this action can lead to deletions of orphans. + + + Does the specified cascading action require verification of no cascade validity? + True if this action requires no-cascade verification; false otherwise. + + + Should this action be performed (or noCascade consulted) in the case of lazy properties. + + + + We need an entry to tell us all about the current state + of a collection with respect to its persistent state + + + + + Defines a complete "snapshot" of a particular collection. + + + + + Gets the identifier of the Entity that owns this Collection. + + + + + Gets the role that identifies this Collection. + + + + + Gets the snapshot copy of the Collection's elements. + + + In most cases this is the same collection type as the one being snapshotted. + ie - the snapshot of an IList will return an IList. + + + + + Gets a indicating if the collection was at one time + associated with an Entity and then later dereferenced during a Flush(). + + + + + Indicates that the Collection can still be reached by an Entity + that exist in the . + + + It is also used to ensure that the Collection is not shared between + two Entities. + + + + + Indicates that the Collection has been processed and is ready + to have its state synchronized with the database. + + + + + Indicates that a Collection needs to be updated. + + + A Collection needs to be updated whenever the contents of the Collection + have been changed. + + + + + Indicates that a Collection has old elements that need to be removed. + + + A Collection needs to have removals performed whenever its role changes or + the key changes and it has a loadedPersister - ie - it was loaded by NHibernate. + + + + + Indicates that a Collection needs to be recreated. + + + A Collection needs to be recreated whenever its role changes + or the owner changes. + + + + + If we instantiate a collection during the + process, we must ignore it for the rest of the flush. + + + + + The that is currently responsible + for the Collection. + + + This is set when NHibernate is updating a reachable or an + unreachable collection. + + + + + The when the Collection was loaded. + + + This can be if the Collection was not loaded by NHibernate and + was passed in along with a transient object. + + + + + The identifier of the Entity that is the owner of this Collection + during the load or post flush. + + + + session-start/post-flush persistent state + + + allow the snapshot to be serialized + + + + Initializes a new instance of . + + + The CollectionEntry is for a Collection that is not dirty and + has already been initialized. + + + + + Initializes a new instance of for collections just loaded from the database. + + The that persists this Collection type. + The identifier of the Entity that is the owner of this Collection. + A boolean indicating whether to ignore the collection during current (or next) flush. + + + For collections just loaded from the database + + + + Initializes a new instance of for initialized detached collections. + + The from another . + The that created this . + + This takes an from another and + creates an entry for it in this by copying the values from the + cs parameter. + + + + + Determine if the collection is "really" dirty, by checking dirtiness + of the collection elements, if necessary + + + + + Prepares this CollectionEntry for the Flush process. + + The that this CollectionEntry will be responsible for flushing. + + + + Updates the CollectionEntry to reflect that the + has been initialized. + + The initialized that this Entry is for. + + + + Updates the CollectionEntry to reflect that it is has been successfully flushed to the database. + + The that was flushed. + + Called after a successful flush. + + + + + Sets the information in this CollectionEntry that is specific to the + . + + + The that is + responsible for the Collection. + + + + + + + + + + + + + + Uniquely identifies a collection instance in a particular session. + + + + + Record the fact that this collection was dereferenced + + The collection to be updated by unreachability. + The session. + + + + Initialize the role of the collection. + + The collection to be updated by reachibility. + The type of the collection. + The owner of the collection. + The session. + + + + We need an entry to tell us all about the current state + of an object with respect to its persistent state + + + + + Initializes a new instance of EntityEntry. + + The current of the Entity. + The snapshot of the Entity's state when it was loaded. + + The identifier of the Entity in the database. + The version of the Entity. + The for the Entity. + A boolean indicating if the Entity exists in the database. + The that is responsible for this Entity. + + + + + + + After actually inserting a row, record the fact that the instance exists on the + database (needed for identity-column key generation) + + + + + After actually updating the database, update the snapshot information, + and escalate the lock mode. + + + + + After actually deleting a row, record the fact that the instance no longer + exists in the database + + + + + Gets or sets the current of the Entity. + + The of the Entity. + + + + Gets or sets the of this Entity with respect to its + persistence in the database. + + The of this Entity. + + + + Gets or sets the identifier of the Entity in the database. + + The identifier of the Entity in the database if one has been assigned. + This might be when the is + and the database generates the id. + + + + Gets or sets the snapshot of the Entity when it was loaded from the database. + + The snapshot of the Entity. + + There will only be a value when the Entity was loaded in the current Session. + + + + + Gets or sets the snapshot of the Entity when it was marked as being ready for deletion. + + The snapshot of the Entity. + This will be if the Entity is not being deleted. + + + + Gets or sets a indicating if this Entity exists in the database. + + if it is already in the database. + + It can also be if it does not exists in the database yet and the + is . + + + + + Gets or sets the version of the Entity. + + The version of the Entity. + + + + Gets or sets the that is responsible for this Entity. + + The that is reponsible for this Entity. + + + + Gets the Fully Qualified Name of the class this Entity is an instance of. + + The Fully Qualified Name of the class this Entity is an instance of. + + + + A globally unique identifier of an instance, consisting of the user-visible identifier + and the identifier space (eg. tablename) + + + + Construct a unique identifier for an entity class instance + + + Used to reconstruct an EntityKey during deserialization. + The identifier value + The root entity name + The specific entity name + The type of the identifier value + Whether represented entity is eligible for batch loading + The session factory + The entity's entity mode + + + + To use in deserialization callback + + + + + + Used to uniquely key an entity instance in relation to a particular session + by some unique property reference, as opposed to identifier. + Uniqueing information consists of the entity-name, the referenced + property name, and the referenced property value. + + + + + + A FilterDefinition defines the global attributes of a dynamic filter. This + information includes its name as well as its defined parameters (name and type). + + + + + Set the named parameter's value list for this filter. + + The name of the filter for which this configuration is in effect. + The default filter condition. + A dictionary storing the NHibernate type + of each parameter under its name. + + + + Retreive the type of the named parameter defined for this filter. + + The name of the filter parameter for which to return the type. + The type of the named parameter. + + + + Get the name of the filter this configuration defines. + + The filter name for this configuration. + + + + Get a set of the parameters defined by this configuration. + + The parameters named by this configuration. + + + Algorithms related to foreign key constraint transparency + + + + Is this instance persistent or detached? + + + If is non-null, don't hit the database to make the + determination, instead assume that value; the client code must be + prepared to "recover" in the case that this assumed result is incorrect. + + + + + Is this instance, which we know is not persistent, actually transient? + If assumed is non-null, don't hit the database to make the + determination, instead assume that value; the client code must be + prepared to "recover" in the case that this assumed result is incorrect. + + + If is non-null, don't hit the database to make the + determination, instead assume that value; the client code must be + prepared to "recover" in the case that this assumed result is incorrect. + + + + + Return the identifier of the persistent or transient object, or throw + an exception if the instance is "unsaved" + + + Used by OneToOneType and ManyToOneType to determine what id value should + be used for an object that may or may not be associated with the session. + This does a "best guess" using any/all info available to use (not just the + EntityEntry). + + + + + Nullify all references to entities that have not yet + been inserted in the database, where the foreign key + points toward that entity + + + + + Return null if the argument is an "unsaved" entity (ie. + one with no existing database row), or the input argument + otherwise. This is how Hibernate avoids foreign key constraint + violations. + + + + + Determine if the object already exists in the database, using a "best guess" + + + + + A strategy for determining if an identifier value is an identifier of a new + transient instance or a previously persistent transient instance. The strategy + is determined by the Unsaved-Value attribute in the mapping file. + + + + + + + + Assume the transient instance is newly instantiated if its identifier is null or + equal to Value + + + + + + Does the given identifier belong to a new instance + + + + + Always assume the transient instance is newly instantiated + + + + + Never assume that transient instance is newly instantiated + + + + + Assume the transient instance is newly instantiated if the identifier + is null. + + + + Assume nothing. + + + + Holds the state of the persistence context, including the + first-level cache, entries, snapshots, proxies, etc. + + + + Add a collection which has no owner loaded + + + + Get and remove a collection whose owner is not yet loaded, + when its owner is being loaded + + + + Clear the state of the persistence context + + + Set the status of an entry + + + Called after transactions end + + + + Get the current state of the entity as known to the underlying + database, or null if there is no corresponding row + + + + + Retrieve the cached database snapshot for the requested entity key. + + The entity key for which to retrieve the cached snapshot + The cached snapshot + + + This differs from is two important respects: + no snapshot is obtained from the database if not already cached + an entry of NO_ROW here is interpretet as an exception + + + + + + Get the values of the natural id fields as known to the underlying + database, or null if the entity has no natural id or there is no + corresponding row. + + + + Add a canonical mapping from entity key to entity instance + + + + Get the entity instance associated with the given EntityKey + + + + Is there an entity with the given key in the persistence context + + + + Remove an entity from the session cache, also clear + up other state associated with the entity, all except + for the EntityEntry + + + + Get an entity cached by unique key + + + Add an entity to the cache by unique key + + + + Retreive the EntityEntry representation of the given entity. + + The entity for which to locate the EntityEntry. + The EntityEntry for the given entity. + + + Remove an entity entry from the session cache + + + Is there an EntityEntry for this instance? + + + Get the collection entry for a persistent collection + + + Adds an entity to the internal caches. + + + + Generates an appropriate EntityEntry instance and adds it + to the event source's internal caches. + + + + Is the given collection associated with this persistence context? + + + Is the given proxy associated with this persistence context? + + + + Takes the given object and, if it represents a proxy, reassociates it with this event source. + + The possible proxy to be reassociated. + Whether the passed value represented an actual proxy which got initialized. + + + + If a deleted entity instance is re-saved, and it has a proxy, we need to + reset the identifier of the proxy + + + + + Get the entity instance underlying the given proxy, throwing + an exception if the proxy is uninitialized. If the given object + is not a proxy, simply return the argument. + + + + + Possibly unproxy the given reference and reassociate it with the current session. + + The reference to be unproxied if it currently represents a proxy. + The unproxied instance. + + + + Attempts to check whether the given key represents an entity already loaded within the + current session. + + The entity reference against which to perform the uniqueness check. + The entity key. + + + + If the existing proxy is insufficiently "narrow" (derived), instantiate a new proxy + and overwrite the registration of the old one. This breaks == and occurs only for + "class" proxies rather than "interface" proxies. Also init the proxy to point to + the given target implementation if necessary. + + The proxy instance to be narrowed. + The persister for the proxied entity. + The internal cache key for the proxied entity. + (optional) the actual proxied entity instance. + An appropriately narrowed instance. + + + + Return the existing proxy associated with the given EntityKey, or the + third argument (the entity associated with the key) if no proxy exists. Init + the proxy to the target implementation, if necessary. + + + + + Return the existing proxy associated with the given EntityKey, or the + argument (the entity associated with the key) if no proxy exists. + (slower than the form above) + + + + Get the entity that owns this persistent collection + + + add a collection we just loaded up (still needs initializing) + + + add a detached uninitialized collection + + + + Add a new collection (ie. a newly created one, just instantiated by the + application, with no database state or snapshot) + + The collection to be associated with the persistence context + + + + + add an (initialized) collection that was created by another session and passed + into update() (ie. one with a snapshot and existing state on the database) + + + + add a collection we just pulled out of the cache (does not need initializing) + + + Get the collection instance associated with the CollectionKey + + + + Register a collection for non-lazy loading at the end of the two-phase load + + + + + Force initialization of all non-lazy collections encountered during + the current two-phase load (actually, this is a no-op, unless this + is the "outermost" load) + + + + Get the PersistentCollection object for an array + + + Register a PersistentCollection object for an array. + Associates a holder with an array - MUST be called after loading + array, since the array instance is not created until endLoad(). + + + + + Remove the mapping of collection to holder during eviction of the owning entity + + + + Get the snapshot of the pre-flush collection state + + + + Get the collection entry for a collection passed to filter, + which might be a collection wrapper, an array, or an unwrapped + collection. Return null if there is no entry. + + + + Get an existing proxy by key + + + Add a proxy to the session cache + + + Remove a proxy from the session cache + + + Called before cascading + + + Called after cascading + + + Call this before begining a two-phase load + + + Call this after finishing a two-phase load + + + + Search the persistence context for an owner for the child object, + given a collection role + + + + + Search the persistence context for an index of the child object, given a collection role + + + + + Record the fact that the association belonging to the keyed entity is null. + + + + Is the association property belonging to the keyed entity null? + + + Set the object to read only and discard it's snapshot + + + + Get the session to which this persistence context is bound. + + + + + Retrieve this persistence context's managed load context. + + + + + Get the BatchFetchQueue, instantiating one if necessary. + + + + Retrieve the set of EntityKeys representing nullifiable references + + + Get the mapping from key value to entity instance + + + Get the mapping from entity instance to entity entry + + + Get the mapping from collection instance to collection entry + + + Get the mapping from collection key to collection instance + + + How deep are we cascaded? + + + Is a flush cycle currently in process? + Called before and after the flushcycle + + + False if we know for certain that all the entities are read-only + + + + Defines the internal contract between the ISessionFactory and other parts of NHibernate + such as implementors of IType. + + + + + Creates ISessions. + + + + Usually an application has a single SessionFactory. Threads servicing client requests + obtain ISessions from the factory. Implementors must be threadsafe. + + + ISessionFactorys are immutable. The behaviour of a SessionFactory + is controlled by properties supplied at configuration time. + These properties are defined on Environment + + + + + + Open a ISession on the given connection + + A connection provided by the application + A session + + Note that the second-level cache will be disabled if you + supply a ADO.NET connection. NHibernate will not be able to track + any statements you might have executed in the same transaction. + Consider implementing your own . + + + + + Create database connection and open a ISession on it, specifying an interceptor + + A session-scoped interceptor + A session + + + + Open a ISession on the given connection, specifying an interceptor + + A connection provided by the application + A session-scoped interceptor + A session + + Note that the second-level cache will be disabled if you + supply a ADO.NET connection. NHibernate will not be able to track + any statements you might have executed in the same transaction. + Consider implementing your own . + + + + + Create a database connection and open a ISession on it + + + + + + Create a new databinder. + + + + + + Get the ClassMetadata associated with the given entity class + + + + + + + Get the CollectionMetadata associated with the named collection role + + + + + + + Get all ClassMetadata as a IDictionary from Type + to metadata object + + + + + + Get all CollectionMetadata as a IDictionary from role name + to metadata object + + + + + + Destroy this SessionFactory and release all resources + connection pools, etc). It is the responsibility of the application + to ensure that there are no open Sessions before calling + close(). + + + + + Evict all entries from the process-level cache. This method occurs outside + of any transaction; it performs an immediate "hard" remove, so does not respect + any transaction isolation semantics of the usage strategy. Use with care. + + + + + + Evict an entry from the process-level cache. This method occurs outside + of any transaction; it performs an immediate "hard" remove, so does not respect + any transaction isolation semantics of the usage strategy. Use with care. + + + + + + + Evict all entries from the second-level cache. This method occurs outside + of any transaction; it performs an immediate "hard" remove, so does not respect + any transaction isolation semantics of the usage strategy. Use with care. + + + + + Evict all entries from the process-level cache. This method occurs outside + of any transaction; it performs an immediate "hard" remove, so does not respect + any transaction isolation semantics of the usage strategy. Use with care. + + + + + + Evict an entry from the process-level cache. This method occurs outside + of any transaction; it performs an immediate "hard" remove, so does not respect + any transaction isolation semantics of the usage strategy. Use with care. + + + + + + + Evict any query result sets cached in the default query cache region. + + + + + Evict any query result sets cached in the named query cache region. + + + + + + Obtain the definition of a filter by name. + + The name of the filter for which to obtain the definition. + The filter definition. + + + + Obtains the current session. + + + + The definition of what exactly "current" means is controlled by the + implementation configured for use. + + + The current session. + Indicates an issue locating a suitable current session. + + + Get a new stateless session. + + + Get a new stateless session for the given ADO.NET connection. + + + + Get the used. + + + + + Get the SQL Dialect + + + + + Obtain a set of the names of all filters defined on this SessionFactory. + + The set of filter names. + + + + This collections allows external libraries + to add their own configuration to the NHibernate session factory. + This is needed in such cases where the library is tightly coupled to NHibernate, such + as the case of NHibernate Search + + + + Get the statistics for this session factory + + + + Get the persister for a class + + + + + Get the persister for the named class + + The name of the class that is persisted. + The for the class. + If no can be found. + + + + Get the persister for the named class + + The name of the class that is persisted. + Whether to throw an exception if the class is not found, + or just return + The for the class. + If no can be found + and throwIfNotFound is true. + + + + Get the persister object for a collection role + + + + + + + Get the return types of a query + + + + + + Get the return aliases of a query + + + + Get the names of all persistent classes that implement/extend the given interface/class + + + + + + + Get a class name, using query language imports + + + + + + + Get a particular named query cache, or the default cache + + the name of the cache region, or null for the default + query cache + the existing cache, or a newly created cache if none by that + region name + + + + Obtain an ADO.NET connection + + + + + + Release an ADO.NET connection + + + + + + Get the identifier generator for the hierarchy + + + + + Open a session conforming to the given parameters. For use mainly by + implementations. + + The external ADO.NET connection to use, if any (i.e., optional). + The release mode for managed database connections. + An appropriate session. + + + + + Open a session conforming to the given parameters. Used mainly + for current session processing. + + The external ado.net connection to use, if one (i.e., optional). + + Should the session be auto-flushed + prior to transaction completion? + + + Should the session be auto-closed after + transaction completion? + + The release mode for managed jdbc connections. + An appropriate session. + + + + Retrieves a set of all the collection roles in which the given entity + is a participant, as either an index or an element. + + The entity name for which to get the collection roles. + + Set of all the collection roles in which the given entityName participates. + + + + Get a named second-level cache region + + + + Is outerjoin fetching enabled? + + + + + Are scrollable ResultSets supported? + + + + + Is PreparedStatement.getGeneratedKeys supported (Java-specific?) + + + + + Get the database schema specified in default_schema + + + + + Maximum depth of outer join fetching + + + + + Get the default query cache + + + + + Is query caching enabled? + + + + + Gets the IsolationLevel an IDbTransaction should be set to. + + + This is only applicable to manually controlled NHibernate Transactions. + + + + Retrieves the SQLExceptionConverter in effect for this SessionFactory. + The SQLExceptionConverter for this SessionFactory. + + + + Gets the ICurrentSessionContext instance attached to this session factory. + + + + The cache of table update timestamps + + + Statistics SPI + + + + Defines the internal contract between the Session and other parts of Hibernate + such as implementors of Type or ClassPersister + + + + + Initialize the collection (if not already initialized) + + + + + + + Load an instance without checking if it was deleted. If it does not exist and isn't nullable, throw an exception. + This method may create a new proxy or return an existing proxy. + + The entityName (or class full name) to load. + The identifier of the object in the database. + Allow null instance + When enabled, the object is eagerly fetched. + + A proxy of the object or an instance of the object if the persistentClass does not have a proxy. + + No object could be found with that id. + + + + Load an instance immediately. Do not return a proxy. + + + + + + + + Execute a List() query + + + + + + + + Strongly-typed version of + + + + + Strongly-typed version of + + + + + Execute an Iterate() query + + + + + + + + Strongly-typed version of + + + + + Execute a filter + + + + + Execute a filter (strongly-typed version). + + + + + Collection from a filter + + + + + Strongly-typed version of + + + + Get the for any instance + optional entity name + the entity instance + + + + Get the IEntityPersister for an object + + + + + + + Notify the session that an NHibernate transaction has begun. + + + + + Notify the session that the transaction is about to complete + + + + + Notify the session that the transaction completed, so we no longer own the old locks. + (Also we shold release cache softlocks). May be called multiple times during the transaction + completion process. + + + + + Return the identifier of the persistent object, or null if transient + + + + + Instantiate the entity class, initializing with the given identifier + + + + + Execute an SQL Query + + + + + Strongly-typed version of + + + + Execute an SQL Query + + + + Retreive the currently set value for a filter parameter. + + The filter parameter name in the format + {FILTER_NAME.PARAMETER_NAME}. + The filter parameter value. + + + + Retreive the type for a given filter parrameter. + + The filter parameter name in the format + {FILTER_NAME.PARAMETER_NAME}. + The filter parameter type. + + + + Get the entity instance associated with the given Key, + calling the Interceptor if necessary + + + + The best guess entity name for an entity not in an association + + + The guessed entity name for an entity not in an association + + + + Allow to get the ISession instance without having to + down cast + + + + + Execute a native SQL update or delete query + + + Execute a HQL update or delete query + + + + System time before the start of the transaction + + + + + + Get the creating SessionFactoryImplementor + + + + + + Get the prepared statement Batcher for this session + + + + + Return the currently enabled filters. The filter map is keyed by filter + name, with values corresponding to the + instance. + + The currently enabled filters. + + + Retrieves the configured event listeners from this event source. + + + Get the persistence context for this session + + + + Is the ISession still open? + + + + + Is the ISession currently connected? + + + + Determine whether the session is closed. Provided seperately from + {@link #isOpen()} as this method does not attempt any JTA synch + registration, where as {@link #isOpen()} does; which makes this one + nicer to use for most internal purposes. + + True if the session is closed; false otherwise. + + + + + Does this Session have an active Hibernate transaction + or is there a JTA transaction in progress? + + + + Retrieve the entity mode in effect for this session. + + + + Get the aliased columns of the owning entity which are to + be used in the join + + + + + Get the columns of the owning entity which are to + be used in the join + + + + + Get the aliased columns of the owning entity which are to + be used in the join + + + + + Get the columns of the owning entity which are to + be used in the join + + + + + Get the columns of the associated table which are to + be used in the join + + + + + Implements the algorithm for validating property values + for illegal null values + + + + + Check nullability of the class persister properties + + entity properties + class persister + wether it is intended to be updated or saved + + + + Check sub elements-nullability. Returns property path that break + nullability or null if none + + type to check + value to check + property path + + + + Check component nullability. Returns property path that break + nullability or null if none + + component properties + component not-nullable type + property path + + + + Return a well formed property path. + Basicaly, it will return parent.child + + parent in path + child in path + parent-child path + + + + Container for data that is used during the NHibernate query/load process. + + + + + + + + Ensure the Types and Values are the same length. + + + If the Lengths of and + are not equal. + + + + + + + + Gets or sets an that contains the named + parameter as the key and the as the value. + + An of named parameters. + + + + Gets or sets an array of objects that is stored at the index + of the Parameter. + + + + + Gets or sets an array of objects that is stored at the index + of the Parameter. + + + + + Gets or sets the for the Query. + + + + + Gets or sets an that contains the alias name of the + object from hql as the key and the as the value. + + An of lock modes. + + + + Information to determine how to run an IDbCommand and what + records to return from the IDataReader. + + + + + Indicates that the no value has been set on the Property. + + + + + Gets or Sets the Index of the First Row to Select + + The Index of the First Rows to Select + Defaults to 0 unless specifically set. + + + + Gets or Sets the Maximum Number of Rows to Select + + The Maximum Number of Rows to Select + Defaults to NoValue unless specifically set. + + + + Gets or Sets the Timeout of the Query + + The Query Timeout + Defaults to NoValue unless specifically set. + + + + A represents the state of persistent "stuff" which + NHibernate is tracking. This includes persistent entities, collections, + as well as proxies generated. + + + There is meant to be a one-to-one correspondence between a SessionImpl and + a PersistentContext. The SessionImpl uses the PersistentContext to track + the current state of its context. Event-listeners then use the + PersistentContext to drive their processing. + + + + Constructs a PersistentContext, bound to the given session. + The session "owning" this context. + + + Add a collection which has no owner loaded + + + + Get and remove a collection whose owner is not yet loaded, + when its owner is being loaded + + + + Clear the state of the persistence context + + + Set the status of an entry + + + Called after transactions end + + + + Get the current state of the entity as known to the underlying + database, or null if there is no corresponding row + + + + + Retrieve the cached database snapshot for the requested entity key. + + The entity key for which to retrieve the cached snapshot + The cached snapshot + + + This differs from is two important respects: + no snapshot is obtained from the database if not already cached + an entry of NO_ROW here is interpretet as an exception + + + + + + Get the values of the natural id fields as known to the underlying + database, or null if the entity has no natural id or there is no + corresponding row. + + + + Add a canonical mapping from entity key to entity instance + + + + Get the entity instance associated with the given EntityKey + + + + Is there an entity with the given key in the persistence context + + + + Remove an entity from the session cache, also clear + up other state associated with the entity, all except + for the EntityEntry + + + + Get an entity cached by unique key + + + Add an entity to the cache by unique key + + + + Retreive the EntityEntry representation of the given entity. + + The entity for which to locate the EntityEntry. + The EntityEntry for the given entity. + + + Remove an entity entry from the session cache + + + Is there an EntityEntry for this instance? + + + Get the collection entry for a persistent collection + + + Adds an entity to the internal caches. + + + + Generates an appropriate EntityEntry instance and adds it + to the event source's internal caches. + + + + Is the given collection associated with this persistence context? + + + Is the given proxy associated with this persistence context? + + + + Takes the given object and, if it represents a proxy, reassociates it with this event source. + + The possible proxy to be reassociated. + Whether the passed value represented an actual proxy which got initialized. + + + + If a deleted entity instance is re-saved, and it has a proxy, we need to + reset the identifier of the proxy + + + + + Associate a proxy that was instantiated by another session with this session + + The proxy initializer. + The proxy to reassociate. + + + + Get the entity instance underlying the given proxy, throwing + an exception if the proxy is uninitialized. If the given object + is not a proxy, simply return the argument. + + + + + Possibly unproxy the given reference and reassociate it with the current session. + + The reference to be unproxied if it currently represents a proxy. + The unproxied instance. + + + + Attempts to check whether the given key represents an entity already loaded within the + current session. + + The entity reference against which to perform the uniqueness check. + The entity key. + + + + If the existing proxy is insufficiently "narrow" (derived), instantiate a new proxy + and overwrite the registration of the old one. This breaks == and occurs only for + "class" proxies rather than "interface" proxies. Also init the proxy to point to + the given target implementation if necessary. + + The proxy instance to be narrowed. + The persister for the proxied entity. + The internal cache key for the proxied entity. + (optional) the actual proxied entity instance. + An appropriately narrowed instance. + + + + Return the existing proxy associated with the given EntityKey, or the + third argument (the entity associated with the key) if no proxy exists. Init + the proxy to the target implementation, if necessary. + + + + + Return the existing proxy associated with the given EntityKey, or the + argument (the entity associated with the key) if no proxy exists. + (slower than the form above) + + + + Get the entity that owns this persistent collection + + + add a collection we just loaded up (still needs initializing) + + + add a detached uninitialized collection + + + + Add a new collection (ie. a newly created one, just instantiated by the + application, with no database state or snapshot) + + The collection to be associated with the persistence context + + + + Add an collection to the cache, with a given collection entry. + The collection for which we are adding an entry. + The entry representing the collection. + The key of the collection's entry. + + + Add a collection to the cache, creating a new collection entry for it + The collection for which we are adding an entry. + + + + add an (initialized) collection that was created by another session and passed + into update() (ie. one with a snapshot and existing state on the database) + + + + add a collection we just pulled out of the cache (does not need initializing) + + + Get the collection instance associated with the CollectionKey + + + + Register a collection for non-lazy loading at the end of the two-phase load + + + + + Force initialization of all non-lazy collections encountered during + the current two-phase load (actually, this is a no-op, unless this + is the "outermost" load) + + + + Get the PersistentCollection object for an array + + + Register a PersistentCollection object for an array. + Associates a holder with an array - MUST be called after loading + array, since the array instance is not created until endLoad(). + + + + + Remove the mapping of collection to holder during eviction of the owning entity + + + + Get the snapshot of the pre-flush collection state + + + + Get the collection entry for a collection passed to filter, + which might be a collection wrapper, an array, or an unwrapped + collection. Return null if there is no entry. + + + + Get an existing proxy by key + + + Add a proxy to the session cache + + + Remove a proxy from the session cache + + + Called before cascading + + + Called after cascading + + + Call this before begining a two-phase load + + + Call this after finishing a two-phase load + + + + Search the persistence context for an owner for the child object, + given a collection role + + + + + Search the persistence context for an index of the child object, given a collection role + + + + + Record the fact that the association belonging to the keyed entity is null. + + + + Is the association property belonging to the keyed entity null? + + + Set the object to read only and discard it's snapshot + + + + Get the session to which this persistence context is bound. + + + + + Retrieve this persistence context's managed load context. + + + + + Get the BatchFetchQueue, instantiating one if necessary. + + + + Retrieve the set of EntityKeys representing nullifiable references + + + Get the mapping from key value to entity instance + + + Get the mapping from entity instance to entity entry + + + Get the mapping from collection instance to collection entry + + + Get the mapping from collection key to collection instance + + + How deep are we cascaded? + + + Is a flush cycle currently in process? + Called before and after the flushcycle + + + False if we know for certain that all the entities are read-only + + + + Represents the status of an entity with respect to + this session. These statuses are for internal + book-keeping only and are not intended to represent + any notion that is visible to the application. + + + + + The Entity is snapshotted in the Session with the same state as the database + (called Managed in H3). + + + + + The Entity is in the Session and has been marked for deletion but not + deleted from the database yet. + + + + + The Entity has been deleted from database. + + + + + The Entity is in the process of being loaded. + + + + + The Entity is in the process of being saved. + + + + + The entity is read-only. + + + + + Functionality relating to Hibernate's two-phase loading process, + that may be reused by persisters that do not use the Loader + framework + + + + + Register the "hydrated" state of an entity instance, after the first step of 2-phase loading. + + Add the "hydrated state" (an array) of an uninitialized entity to the session. We don't try + to resolve any associations yet, because there might be other entities waiting to be + read from the JDBC result set we are currently processing + + + + + Perform the second step of 2-phase load. Fully initialize the entity instance. + After processing a JDBC result set, we "resolve" all the associations + between the entities which were instantiated and had their state + "hydrated" into an array + + + + + Add an uninitialized instance of an entity class, as a placeholder to ensure object + identity. Must be called before postHydrate(). + Create a "temporary" entry for a newly instantiated entity. The entity is uninitialized, + but we need the mapping from id to instance in order to guarantee uniqueness. + + + + An ordered pair of a value and its Hibernate type. + + + + Return an IdentifierValue for the specified unsaved-value. If none is specified, + guess the unsaved value by instantiating a test instance of the class and + reading it's id property, or if that is not possible, using the java default + value for the type + + + + + An enum of the different ways a value might be "included". + + + This is really an expanded true/false notion with Partial being the + expansion. Partial deals with components in the cases where + parts of the referenced component might define inclusion, but the + component overall does not. + + + + + Utility methods for managing versions and timestamps + + + + + Increment the given version number + + The value of the current version. + The of the versioned property. + The current . + Returns the next value for the version. + + + + Create an initial version number + + The of the versioned property. + The current . + A seed value to initialize the versioned property with. + + + + Seed the given instance state snapshot with an initial version number + + An array of objects that contains a snapshot of a persistent object. + The index of the version property in the fields parameter. + The of the versioned property. + Force the version to initialize + The current session, if any. + if the version property needs to be seeded with an initial value. + + + + Set the version number of the given instance state snapshot + + An array of objects that contains a snapshot of a persistent object. + The value the version should be set to in the fields parameter. + The that is responsible for persisting the values of the fields parameter. + + + + Get the version number of the given instance state snapshot + + An array of objects that contains a snapshot of a persistent object. + The that is responsible for persisting the values of the fields parameter. + + The value of the version contained in the fields parameter or null if the + Entity is not versioned. + + + + Do we need to increment the version number, given the dirty properties? + The array of property indexes which were deemed dirty + Were any collections found to be dirty (structurally changed) + An array indicating versionability of each property. + True if a version increment is required; false otherwise. + + + + A strategy for determining if a version value is an version of + a new transient instance or a previously persistent transient instance. + The strategy is determined by the Unsaved-Value attribute in the mapping file. + + + + + + + + Assume the transient instance is newly instantiated if its version is null or + equal to Value + + + + + + Does the given identifier belong to a new instance + + + + + Assume the transient instance is newly instantiated if the version + is null, otherwise assume it is a detached instance. + + + + + Assume the transient instance is newly instantiated if the version + is null, otherwise defer to the identifier unsaved-value. + + + + + Assume the transient instance is newly instantiated if the identifier + is null. + + + + + A convenience base class for listeners whose functionality results in flushing. + + + + + Coordinates the processing necessary to get things ready for executions + as db calls by preping the session caches and moving the appropriate + entities and collections to their respective execution queues. + + The flush event. + + + + Execute all SQL and second-level cache updates, in a + special order so that foreign-key constraints cannot + be violated: + + Inserts, in the order they were performed + Updates + Deletion of collection elements + Insertion of collection elements + Deletes, in the order they were performed + + + + + + 1. Recreate the collection key -> collection map + 2. rebuild the collection entries + 3. call Interceptor.postFlush() + + + + + A convenience base class for listeners that respond to requests to perform a + pessimistic lock upgrade on an entity. + + + + + A convenience base class for listeners that respond to requests to reassociate an entity + to a session ( such as through lock() or update() ). + + + + + Associates a given entity (either transient or associated with another session) to the given session. + + The event triggering the re-association + The entity to be associated + The id of the entity. + The entity's persister instance. + An EntityEntry representing the entity within this session. + + + + Performs a pessimistic lock upgrade on a given entity, if needed. + + The entity for which to upgrade the lock. + The entity's EntityEntry instance. + The lock mode being requested for locking. + The session which is the source of the event being processed. + + + + A convenience bas class for listeners responding to save events. + + + + + Prepares the save call using the given requested id. + + The entity to be saved. + The id to which to associate the entity. + The name of the entity being saved. + Generally cascade-specific information. + The session which is the source of this save event. + The id used to save the entity. + + + + Prepares the save call using a newly generated id. + + The entity to be saved + The entity-name for the entity to be saved + Generally cascade-specific information. + The session which is the source of this save event. + + does the event context require + access to the identifier immediately after execution of this method (if + not, post-insert style id generators may be postponed if we are outside + a transaction). + + + The id used to save the entity; may be null depending on the + type of id generator used and the requiresImmediateIdAccess value + + + + + Ppepares the save call by checking the session caches for a pre-existing + entity and performing any lifecycle callbacks. + + The entity to be saved. + The id by which to save the entity. + The entity's persister instance. + Is an identity column being used? + Generally cascade-specific information. + The session from which the event originated. + + does the event context require + access to the identifier immediately after execution of this method (if + not, post-insert style id generators may be postponed if we are outside + a transaction). + + + The id used to save the entity; may be null depending on the + type of id generator used and the requiresImmediateIdAccess value + + + + + Performs all the actual work needed to save an entity (well to get the save moved to + the execution queue). + + The entity to be saved + The id to be used for saving the entity (or null, in the case of identity columns) + The entity's persister instance. + Should an identity column be used for id generation? + Generally cascade-specific information. + The session which is the source of the current event. + + Is access to the identifier required immediately + after the completion of the save? persist(), for example, does not require this... + + + The id used to save the entity; may be null depending on the + type of id generator used and the requiresImmediateIdAccess value + + + + + Perform any property value substitution that is necessary + (interceptor callback, version initialization...) + + The entity + The entity identifier + The snapshot entity state + The entity persister + The originating session + + True if the snapshot state changed such that + reinjection of the values into the entity is required. + + + + Handles the calls needed to perform pre-save cascades for the given entity. + The session from whcih the save event originated. + The entity's persister instance. + The entity to be saved. + Generally cascade-specific data + + + Handles to calls needed to perform post-save cascades. + The session from which the event originated. + The entity's persister instance. + The entity beng saved. + Generally cascade-specific data + + + + Determine whether the entity is persistent, detached, or transient + + The entity to check + The name of the entity + The entity's entry in the persistence context + The originating session. + The state. + + + + After the save, will te version number be incremented + if the instance is modified? + + True if the version will be incremented on an entity change after save; false otherwise. + + + + Abstract superclass of algorithms that walk a tree of property values of an entity, and + perform specific functionality for collections, components and associated entities. + + + + Dispatch each property value to ProcessValue(). + + + + + + Visit a property value. Dispatch to the correct handler for the property type. + + + + + + + Visit a component. Dispatch each property to + + + + + + + + Visit a many-to-one or one-to-one associated entity. Default superclass implementation is a no-op. + + + + + + + + Visit a collection. Default superclass implementation is a no-op. + + + + + + + + Walk the tree starting from the given entity. + + + + + + + Defines the default flush event listeners used by hibernate for + flushing session state in response to generated auto-flush events. + + + + Defines the contract for handling of session auto-flush events. + + + + Handle the given auto-flush event. + + The auto-flush event to be handled. + + + + Handle the given auto-flush event. + + The auto-flush event to be handled. + + + + Defines the default delete event listener used by hibernate for deleting entities + from the datastore in response to generated delete events. + + + + Defines the contract for handling of deletion events generated from a session. + + + Handle the given delete event. + The delete event to be handled. + + + Handle the given delete event. + The delete event to be handled. + + + Called when we have recognized an attempt to delete a detached entity. + The event. + + This is perfectly valid in Hibernate usage; JPA, however, forbids this. + Thus, this is a hook for HEM to affect this behavior. + + + + + We encountered a delete request on a transient instance. +

+ This is a deviation from historical Hibernate (pre-3.2) behavior to + align with the JPA spec, which states that transient entities can be + passed to remove operation in which case cascades still need to be + performed. +

+ The session which is the source of the event + The entity being delete processed + Is cascading of deletes enabled + The entity persister + + A cache of already visited transient entities (to avoid infinite recursion). + +
+ + + Perform the entity deletion. Well, as with most operations, does not + really perform it; just schedules an action/execution with the + for execution during flush. + + The originating session + The entity to delete + The entity's entry in the + Is delete cascading enabled? + The entity persister. + A cache of already deleted entities. + + + + Defines the default dirty-check event listener used by hibernate for + checking the session for dirtiness in response to generated dirty-check events. + + + + Defines the contract for handling of session dirty-check events. + + + Handle the given dirty-check event. + The dirty-check event to be handled. + + + + Defines the default evict event listener used by hibernate for evicting entities + in response to generated flush events. In particular, this implementation will + remove any hard references to the entity that are held by the infrastructure + (references held by application or other persistent instances are okay) + + + + Defines the contract for handling of evict events generated from a session. + + + Handle the given evict event. + The evict event to be handled. + + + + An event that occurs for each entity instance at flush time + + + + + Flushes a single entity's state to the database, by scheduling an update action, if necessary + + + + + make sure user didn't mangle the id + + + + + + + + Performs all necessary checking to determine if an entity needs an SQL update + to synchronize its state to the database. Modifies the event by side-effect! + Note: this method is quite slow, avoid calling if possible! + + + + Perform a dirty check, and attach the results to the event + + + + Defines the default flush event listeners used by hibernate for + flushing session state in response to generated flush events. + + + + Defines the contract for handling of session flush events. + + + Handle the given flush event. + The flush event to be handled. + + + + Defines the contract for handling of collection initialization events + generated by a session. + + + + called by a collection that wants to initialize itself + + + Try to initialize a collection from the cache + + + + Defines the default load event listeners used by hibernate for loading entities + in response to generated load events. + + + + + Defines the contract for handling of load events generated from a session. + + + + + Handle the given load event. + + The load event to be handled. + + The result (i.e., the loaded entity). + + + Perfoms the load of an entity. + The loaded entity. + + + + Based on configured options, will either return a pre-existing proxy, + generate a new proxy, or perform an actual load. + + The result of the proxy/load operation. + + + + Given that there is a pre-existing proxy. + Initialize it if necessary; narrow if necessary. + + + + + Given that there is no pre-existing proxy. + Check if the entity is already loaded. If it is, return the entity, + otherwise create and return a proxy. + + + + + If the class to be loaded has been configured with a cache, then lock + given id in that cache and then perform the load. + + The loaded entity + + + + Coordinates the efforts to load a given entity. First, an attempt is + made to load the entity from the session-level cache. If not found there, + an attempt is made to locate it in second-level cache. Lastly, an + attempt is made to load it directly from the datasource. + + The load event + The persister for the entity being requested for load + The EntityKey representing the entity to be loaded. + The load options. + The loaded entity, or null. + + + + Performs the process of loading an entity from the configured underlying datasource. + + The load event + The persister for the entity being requested for load + The EntityKey representing the entity to be loaded. + The load options. + The object loaded from the datasource, or null if not found. + + + + Attempts to locate the entity in the session-level cache. + + The load event + The EntityKey representing the entity to be loaded. + The load options. + The entity from the session-level cache, or null. + + If allowed to return nulls, then if the entity happens to be found in + the session cache, we check the entity type for proper handling + of entity hierarchies. + If checkDeleted was set to true, then if the entity is found in the + session-level cache, it's current status within the session cache + is checked to see if it has previously been scheduled for deletion. + + + + Attempts to load the entity from the second-level cache. + The load event + The persister for the entity being requested for load + The load options. + The entity from the second-level cache, or null. + + + + Defines the default lock event listeners used by hibernate to lock entities + in response to generated lock events. + + + + + Defines the contract for handling of lock events generated from a session. + + + + Handle the given lock event. + The lock event to be handled. + + + Handle the given lock event. + The lock event to be handled. + + + + Defines the default copy event listener used by hibernate for copying entities + in response to generated copy events. + + + + + Defines the contract for handling of merge events generated from a session. + + + + Handle the given merge event. + The merge event to be handled. + + + Handle the given merge event. + The merge event to be handled. + + + + + Perform any cascades needed as part of this copy event. + + The merge event being processed. + The persister of the entity being copied. + The entity being copied. + A cache of already copied instance. + + + Cascade behavior is redefined by this subclass, disable superclass behavior + + + Cascade behavior is redefined by this subclass, disable superclass behavior + + + + Defines the default create event listener used by hibernate for creating + transient entities in response to generated create events. + + + + + Defines the contract for handling of create events generated from a session. + + + + Handle the given create event. + The create event to be handled. + + + Handle the given create event. + The create event to be handled. + + + + Handle the given create event. + The save event to be handled. + + + + When persist is used as the cascade action, persistOnFlush should be used + + + Call interface if necessary + + + + Occurs after an an entity instance is fully loaded. + + + + + + + + + + + Called before injecting property values into a newly + loaded entity instance. + + + + + Called before injecting property values into a newly loaded entity instance. + + + + + + + + + + + Defines the default refresh event listener used by hibernate for refreshing entities + in response to generated refresh events. + + + + + Defines the contract for handling of refresh events generated from a session. + + + + Handle the given refresh event. + The refresh event to be handled. + + + + + + + + + + + Defines the default replicate event listener used by Hibernate to replicate + entities in response to generated replicate events. + + + + + Defines the contract for handling of replicate events generated from a session. + + + + Handle the given replicate event. + The replicate event to be handled. + + + An event handler for save() events + + + + Defines the default listener used by Hibernate for handling save-update events. + + + + + Defines the contract for handling of update events generated from a session. + + + + Handle the given update event. + The update event to be handled. + + + + The given save-update event named a transient entity. + Here, we will perform the save processing. + + The save event to be handled. + The entity's identifier after saving. + + + + Save the transient instance, assigning the right identifier + + The initiating event. + The entity's identifier value after saving. + + + + The given save-update event named a detached entity. + Here, we will perform the update processing. + + The update event to be handled. + + + Determine the id to use for updating. + The entity. + The entity persister + The requested identifier + The entity mode. + The id. + + + + Handles the calls needed to perform cascades as part of an update request + for the given entity. + + The event currently being processed. + The defined persister for the entity being updated. + The entity being updated. + + + An event handler for update() events + + + + If the user specified an id, assign it to the instance and use that, + otherwise use the id already assigned to the instance + + + + + A Visitor that determines if a dirty collection was found. + + + + + Reason for dirty collection + + + + If it is a new application-instantiated collection, return true (does not occur anymore!) + + + + + If it is a component, recurse. + + + + + If it is a wrapped collection, ask the collection entry. + + + + + + + + Gets a indicating if a dirty collection was found. + + if a dirty collection was found. + + + + Evict any collections referenced by the object from the session cache. + This will NOT pick up any collections that were dereferenced, so they + will be deleted (suboptimal but not exactly incorrect). + + + + + Process collections reachable from an entity. + This visitor assumes that wrap was already performed for the entity. + + + + + When a transient entity is passed to lock(), we must inspect all its collections and + 1. associate any uninitialized PersistentCollections with this session + 2. associate any initialized PersistentCollections with this session, using the existing snapshot + 3. throw an exception for each "new" collection + + + + + Abstract superclass of visitors that reattach collections + + + + + Reassociates uninitialized proxies with the session + + + + + Visit a many-to-one or one-to-one associated entity. Default superclass implementation is a no-op. + + + + + + + + Has the owner of the collection changed since the collection was snapshotted and detached? + + + + + Reattach a detached (disassociated) initialized or uninitialized + collection wrapper, using a snapshot carried with the collection wrapper + + + + + Schedules a collection for deletion. + + The persister representing the collection to be removed. + The collection key (differs from owner-id in the case of property-refs). + The session from which the request originated. + + + + This version is slightly different in that here we need to assume that + the owner is not yet associated with the session, and thus we cannot + rely on the owner's EntityEntry snapshot... + + The persister for the collection role being processed. + + + + + When an entity is passed to replicate(), and there is an existing row, we must + inspect all its collections and + 1. associate any uninitialized PersistentCollections with this session + 2. associate any initialized PersistentCollections with this session, using the existing snapshot + 3. execute a collection removal (SQL DELETE) for each null collection property or "new" collection + + + + + When an entity is passed to update(), we must inspect all its collections and + 1. associate any uninitialized PersistentCollections with this session + 2. associate any initialized PersistentCollections with this session, using the existing snapshot + 3. execute a collection removal (SQL DELETE) for each null collection property or "new" collection + + + + + Wrap collections in a Hibernate collection wrapper. + + + + + Defines a base class for Session generated events. + + + + + Constructs an event from the given event session. + + The session event source. + + + + Returns the session event source for this event. + This is the underlying session from which this event was generated. + + + + Defines an event class for the auto-flushing of a session. + + + Defines an event class for the flushing of a session. + + + Defines an event class for the deletion of an entity. + + + Constructs a new DeleteEvent instance. + The entity to be deleted. + The session from which the delete event was generated. + + + + + Returns the encapsulated entity to be deleed. + + + + Defines an event class for the dirty-checking of a session. + + + + A convience holder for all defined session event listeners. + + + + + Call on any listeners that implement + . + + + + + Defines an event class for the evicting of an entity. + + + + The main runtime interface between a Java application and Hibernate. This is the central + API class abstracting the notion of a persistence service. + + + + The lifecycle of a ISession is bounded by the beginning and end of a logical + transaction. (Long transactions might span several database transactions.) + + + The main function of the ISession is to offer create, find and delete operations + for instances of mapped entity classes. Instances may exist in one of two states: + + transient: not associated with any ISession + persistent: associated with a ISession + + + + Transient instances may be made persistent by calling Save(), Insert(), + or Update(). Persistent instances may be made transient by calling Delete(). + Any instance returned by a List(), Iterate(), Load(), or Create + method is persistent. + + + Save() results in an SQL INSERT, Delete() + in an SQL DELETE and Update() in an SQL UPDATE. Changes to + persistent instances are deteced at flush time and also result in an SQL + UPDATE. + + + It is not intended that implementors be threadsafe. Instead each thread/transaction should obtain + its own instance from an ISessionFactory. + + + A ISession instance is serializable if its persistent classes are serializable + + + A typical transaction should use the following idiom: + + ISession sess = factory.OpenSession(); + ITransaction tx; + try { + tx = sess.BeginTransaction(); + //do some work + ... + tx.Commit(); + } catch (Exception e) { + if (tx != null) tx.Rollback(); + throw; + } finally { + sess.Close(); + } + + + + If the ISession throws an exception, the transaction must be rolled back and the session + discarded. The internal state of the ISession might not be consistent with the database + after the exception occurs. + + + + + + + Force the ISession to flush. + + + Must be called at the end of a unit of work, before commiting the transaction and closing + the session (Transaction.Commit() calls this method). Flushing if the process + of synchronising the underlying persistent store with persistable state held in memory. + + + + + Disconnect the ISession from the current ADO.NET connection. + + + If the connection was obtained by Hibernate, close it or return it to the connection + pool. Otherwise return it to the application. This is used by applications which require + long transactions. + + The connection provided by the application or + + + + Obtain a new ADO.NET connection. + + + This is used by applications which require long transactions + + + + + Reconnect to the given ADO.NET connection. + + This is used by applications which require long transactions + An ADO.NET connection + + + + End the ISession by disconnecting from the ADO.NET connection and cleaning up. + + + It is not strictly necessary to Close() the ISession but you must + at least Disconnect() it. + + The connection provided by the application or + + + + Cancel execution of the current query. + + + May be called from one thread to stop execution of a query in another thread. + Use with care! + + + + + Does this ISession contain any changes which must be + synchronized with the database? Would any SQL be executed if + we flushed this session? + + + + + Return the identifier of an entity instance cached by the ISession + + + Throws an exception if the instance is transient or associated with a different + ISession + + a persistent instance + the identifier + + + + Is this instance associated with this Session? + + an instance of a persistent class + true if the given instance is associated with this Session + + + + Remove this instance from the session cache. + + + Changes to the instance will not be synchronized with the database. + This operation cascades to associated instances if the association is mapped + with cascade="all" or cascade="all-delete-orphan". + + a persistent instance + + + + Return the persistent instance of the given entity class with the given identifier, + obtaining the specified lock mode. + + A persistent class + A valid identifier of an existing persistent instance of the class + The lock level + the persistent instance + + + + Return the persistent instance of the given entity class with the given identifier, + assuming that the instance exists. + + + You should not use this method to determine if an instance exists (use a query or + instead). Use this only to retrieve an instance + that you assume exists, where non-existence would be an actual error. + + A persistent class + A valid identifier of an existing persistent instance of the class + The persistent instance or proxy + + + + Return the persistent instance of the given entity class with the given identifier, + obtaining the specified lock mode. + + A persistent class + A valid identifier of an existing persistent instance of the class + The lock level + the persistent instance + + + + Return the persistent instance of the given entity class with the given identifier, + assuming that the instance exists. + + + You should not use this method to determine if an instance exists (use a query or + instead). Use this only to retrieve an instance that you + assume exists, where non-existence would be an actual error. + + A persistent class + A valid identifier of an existing persistent instance of the class + The persistent instance or proxy + + + + Read the persistent state associated with the given identifier into the given transient + instance. + + An "empty" instance of the persistent class + A valid identifier of an existing persistent instance of the class + + + + Persist all reachable transient objects, reusing the current identifier + values. Note that this will not trigger the Interceptor of the Session. + + a detached instance of a persistent class + + + + + Persist the state of the given detached instance, reusing the current + identifier value. This operation cascades to associated instances if + the association is mapped with cascade="replicate". + + + a detached instance of a persistent class + + + + + Persist the given transient instance, first assigning a generated identifier. + + + Save will use the current value of the identifier property if the Assigned + generator is used. + + A transient instance of a persistent class + The generated identifier + + + + Persist the given transient instance, using the given identifier. + + A transient instance of a persistent class + An unused valid identifier + + + + Persist the given transient instance, first assigning a generated identifier. (Or + using the current value of the identifier property if the assigned + generator is used.) + + The Entity name. + a transient instance of a persistent class + the generated identifier + + This operation cascades to associated instances if the + association is mapped with cascade="save-update". + + + + + Either Save() or Update() the given instance, depending upon the value of + its identifier property. + + + By default the instance is always saved. This behaviour may be adjusted by specifying + an unsaved-value attribute of the identifier property mapping + + A transient instance containing new or updated state + + + + Either or + the given instance, depending upon resolution of the unsaved-value checks + (see the manual for discussion of unsaved-value checking). + + The name of the entity + a transient or detached instance containing new or updated state + + + + This operation cascades to associated instances if the association is mapped + with cascade="save-update". + + + + + Update the persistent instance with the identifier of the given transient instance. + + + If there is a persistent instance with the same identifier, an exception is thrown. If + the given transient instance has a identifier, an exception will be thrown. + + A transient instance containing updated state + + + + Update the persistent state associated with the given identifier. + + + An exception is thrown if there is a persistent instance with the same identifier + in the current session. + + A transient instance containing updated state + Identifier of persistent instance + + + + Update the persistent instance with the identifier of the given detached + instance. + + The Entity name. + a detached instance containing updated state + + If there is a persistent instance with the same identifier, + an exception is thrown. This operation cascades to associated instances + if the association is mapped with cascade="save-update". + + + + + + + + + Copy the state of the given object onto the persistent object with the same + identifier. If there is no persistent instance currently associated with + the session, it will be loaded. Return the persistent instance. If the + given instance is unsaved or does not exist in the database, save it and + return it as a newly persistent instance. Otherwise, the given instance + does not become associated with the session. + + a transient instance with state to be copied + an updated persistent instance + + + + Copy the state of the given object onto the persistent object with the + given identifier. If there is no persistent instance currently associated + with the session, it will be loaded. Return the persistent instance. If + there is no database row with the given identifier, save the given instance + and return it as a newly persistent instance. Otherwise, the given instance + does not become associated with the session. + + a persistent or transient instance with state to be copied + the identifier of the instance to copy to + an updated persistent instance + + + + Remove a persistent instance from the datastore. + + + The argument may be an instance associated with the receiving ISession or a + transient instance with an identifier associated with existing persistent state. + + The instance to be removed + + + + Execute a query + + A query expressed in Hibernate's query language + A distinct list of instances + See for implications of cache usage. + + + + Execute a query, binding a value to a "?" parameter in the query string. + + The query string + A value to be bound to a "?" placeholder + The Hibernate type of the value + A distinct list of instances + See for implications of cache usage. + + + + Execute a query, binding an array of values to a "?" parameters in the query string. + + The query string + An array of values to be bound to the "?" placeholders + An array of Hibernate types of the values + A distinct list of instances + See for implications of cache usage. + + + + Execute a query and return the results in an interator. + + + + If the query has multiple return values, values will be returned in an array of + type object[]. + + + Entities returned as results are initialized on demand. The first SQL query returns + identifiers only. So Enumerator() is usually a less efficient way to retrieve + object than List(). + + + The query string + An enumerator + + + + Execute a query and return the results in an interator, + binding a value to a "?" parameter in the query string. + + + + If the query has multiple return values, values will be returned in an array of + type object[]. + + + Entities returned as results are initialized on demand. The first SQL query returns + identifiers only. So Enumerator() is usually a less efficient way to retrieve + object than List(). + + + The query string + A value to be written to a "?" placeholder in the query string + The hibernate type of the value + An enumerator + + + + Execute a query and return the results in an interator, + binding the values to "?"s parameters in the query string. + + + + If the query has multiple return values, values will be returned in an array of + type object[]. + + + Entities returned as results are initialized on demand. The first SQL query returns + identifiers only. So Enumerator() is usually a less efficient way to retrieve + object than List(). + + + The query string + A list of values to be written to "?" placeholders in the query + A list of hibernate types of the values + An enumerator + + + + Apply a filter to a persistent collection. + + + A filter is a Hibernate query that may refer to this, the collection element. + Filters allow efficient access to very large lazy collections. (Executing the filter + does not initialize the collection.) + + A persistent collection to filter + A filter query string + The resulting collection + + + + Apply a filter to a persistent collection, binding the given parameter to a "?" placeholder + + + A filter is a Hibernate query that may refer to this, the collection element. + Filters allow efficient access to very large lazy collections. (Executing the filter + does not initialize the collection.) + + A persistent collection to filter + A filter query string + A value to be written to a "?" placeholder in the query + The hibernate type of value + A collection + + + + Apply a filter to a persistent collection, binding the given parameters to "?" placeholders. + + + A filter is a Hibernate query that may refer to this, the collection element. + Filters allow efficient access to very large lazy collections. (Executing the filter + does not initialize the collection.) + + A persistent collection to filter + A filter query string + The values to be written to "?" placeholders in the query + The hibernate types of the values + A collection + + + + Delete all objects returned by the query. + + The query string + Returns the number of objects deleted. + + + + Delete all objects returned by the query. + + The query string + A value to be written to a "?" placeholer in the query + The hibernate type of value. + The number of instances deleted + + + + Delete all objects returned by the query. + + The query string + A list of values to be written to "?" placeholders in the query + A list of Hibernate types of the values + The number of instances deleted + + + + Obtain the specified lock level upon the given object. + + A persistent instance + The lock level + + + + Obtain the specified lock level upon the given object. + + The Entity name. + a persistent or transient instance + the lock level + + This may be used to perform a version check (), to upgrade to a pessimistic + lock (), or to simply reassociate a transient instance + with a session (). This operation cascades to associated + instances if the association is mapped with cascade="lock". + + + + + Re-read the state of the given instance from the underlying database. + + + + It is inadvisable to use this to implement long-running sessions that span many + business tasks. This method is, however, useful in certain special circumstances. + + + For example, + + Where a database trigger alters the object state upon insert or update + After executing direct SQL (eg. a mass update) in the same session + After inserting a Blob or Clob + + + + A persistent instance + + + + Re-read the state of the given instance from the underlying database, with + the given LockMode. + + + It is inadvisable to use this to implement long-running sessions that span many + business tasks. This method is, however, useful in certain special circumstances. + + a persistent or transient instance + the lock mode to use + + + + Determine the current lock mode of the given object + + A persistent instance + The current lock mode + + + + Begin a unit of work and return the associated ITransaction object. + + + If a new underlying transaction is required, begin the transaction. Otherwise + continue the new work in the context of the existing underlying transaction. + The class of the returned object is determined by + the property transaction_factory + + A transaction instance + + + + Begin a transaction with the specified isolationLevel + + Isolation level for the new transaction + A transaction instance having the specified isolation level + + + + Creates a new Criteria for the entity class. + + The class to Query + An ICriteria object + + + + Creates a new Criteria for the entity class with a specific alias + + The class to Query + The alias of the entity + An ICriteria object + + + + Create a new instance of Query for the given query string + + A hibernate query string + The query + + + + Create a new instance of Query for the given collection and filter string + + A persistent collection + A hibernate query + A query + + + + Obtain an instance of for a named query string defined in the + mapping file. + + The name of a query defined externally. + An from a named query string. + + The query can be either in HQL or SQL format. + + + + + Create a new instance of IQuery for the given SQL string. + + a query expressed in SQL + a table alias that appears inside {} in the SQL string + the returned persistent class + An from the SQL string + + + + Create a new instance of for the given SQL string. + + a query expressed in SQL + an array of table aliases that appear inside {} in the SQL string + the returned persistent classes + An from the SQL string + + + + Create a new instance of for the given SQL query string. + + a query expressed in SQL + An from the SQL string + + + + Completely clear the session. Evict all loaded instances and cancel all pending + saves, updates and deletions. Do not close open enumerables or instances of + ScrollableResults. + + + + + Return the persistent instance of the given entity class with the given identifier, or null + if there is no such persistent instance. (If the instance, or a proxy for the instance, is + already associated with the session, return that instance or proxy.) + + a persistent class + an identifier + a persistent instance or null + + + + Return the persistent instance of the given entity class with the given identifier, or null + if there is no such persistent instance. Obtain the specified lock mode if the instance + exists. + + a persistent class + an identifier + the lock mode + a persistent instance or null + + + + Return the persistent instance of the given named entity with the given identifier, + or null if there is no such persistent instance. (If the instance, or a proxy for the + instance, is already associated with the session, return that instance or proxy.) + + the entity name + an identifier + a persistent instance or null + + + + Strongly-typed version of + + + + + Strongly-typed version of + + + + + Return the entity name for a persistent entity + + a persistent entity + the entity name + + + + Enable the named filter for this current session. + + The name of the filter to be enabled. + The Filter instance representing the enabled filter. + + + + Retrieve a currently enabled filter by name. + + The name of the filter to be retrieved. + The Filter instance representing the enabled filter. + + + + Disable the named filter for the current session. + + The name of the filter to be disabled. + + + + Create a multi query, a query that can send several + queries to the server, and return all their results in a single + call. + + + An that can return + a list of all the results of all the queries. + Note that each query result is itself usually a list. + + + + + Sets the batch size of the session + + + + + + + Gets the session implementation. + + + This method is provided in order to get the NHibernate implementation of the session from wrapper implementions. + Implementors of the interface should return the NHibernate implementation of this method. + + + An NHibernate implementation of the interface + + + + + An that can return a list of all the results + of all the criterias. + + + + + + Starts a new Session with the given entity mode in effect. This secondary + Session inherits the connection, transaction, and other context + information from the primary Session. It doesn't need to be flushed + or closed by the developer. + + The entity mode to use for the new session. + The new session + + + + Determines at which points Hibernate automatically flushes the session. + + + For a readonly session, it is reasonable to set the flush mode to FlushMode.Never + at the start of the session (in order to achieve some extra performance). + + + + The current cache mode. + + Cache mode determines the manner in which this session can interact with + the second level cache. + + + + + Get the that created this instance. + + + + + Gets the ADO.NET connection. + + + Applications are responsible for calling commit/rollback upon the connection before + closing the ISession. + + + + + Is the ISession still open? + + + + + Is the ISession currently connected? + + + + + Get the current Unit of Work and return the associated ITransaction object. + + + + Get the statistics for this session. + + + + Instantiate an entity instance, using either an interceptor, + or the given persister + + + + Force an immediate flush + + + Cascade merge an entity instance + + + Cascade persist an entity instance + + + Cascade persist an entity instance during the flush process + + + Cascade refesh an entity instance + + + Cascade copy an entity instance + + + Cascade delete an entity instance + + + Get the ActionQueue for this session + + + + An event listener that requires access to mappings to + initialize state at initialization time. + + + + + An event that occurs when a collection wants to be initialized + + + + Called after deleting an item from the datastore + + + + + + + + + Called after insterting an item in the datastore + + + + + + + + + + Called after updating the datastore + + + + + + + + + + + Called before deleting an item from the datastore + + + + Return true if the operation should be vetoed + + + + + Called before inserting an item in the datastore + + + + Return true if the operation should be vetoed + + + + + Called before updating the datastore + + + + Return true if the operation should be vetoed + + + + + Values for listener type property. + + Unused + + + Not allowed in Xml. It represente de default value when an explicit type is assigned. + + + Xml value: auto-flush + + + Xml value: merge + + + Xml value: create + + + Xml value: create-onflush + + + Xml value: delete + + + Xml value: dirty-check + + + Xml value: evict + + + Xml value: flush + + + Xml value: flush-entity + + + Xml value: load + + + Xml value: load-collection + + + Xml value: lock + + + Xml value: refresh + + + Xml value: replicate + + + Xml value: save-update + + + Xml value: save + + + Xml value: pre-update + + + Xml value: update + + + Xml value: pre-load + + + Xml value: pre-delete + + + Xml value: pre-insert + + + Xml value: post-load + + + Xml value: post-insert + + + Xml value: post-update + + + Xml value: post-delete + + + Xml value: post-commit-update + + + Xml value: post-commit-insert + + + Xml value: post-commit-delete + + + Defines an event class for the loading of an entity. + + + + Defines an event class for the locking of an entity. + + + + + An event class for merge() and saveOrUpdateCopy() + + + + An event class for persist() + + + + Occurs after deleting an item from the datastore + + + + + Occurs after inserting an item in the datastore + + + + + Occurs after an an entity instance is fully loaded. + + + + + Occurs after the datastore is updated + + + + + Occurs before deleting an item from the datastore + + + + + Occurs before inserting an item in the datastore + + + + + Called before injecting property values into a newly loaded entity instance. + + + + + Occurs before updating the datastore + + + + + Defines an event class for the refreshing of an object. + + + + + Defines an event class for the replication of an entity. + + + + + An event class for saveOrUpdate() + + + + + Implementation of ADOException indicating problems with communicating with the + database (can also include incorrect ADO setup). + + + + + Wraps exceptions that occur during ADO.NET calls. + + + Exceptions thrown by various ADO.NET providers are not derived from + a common base class (SQLException in Java), so + is used instead in NHibernate. + + + + + Initializes a new instance of the class. + + The message that describes the error. + + The exception that is the cause of the current exception. If the innerException parameter + is not a null reference, the current exception is raised in a catch block that handles + the inner exception. + + + + + Initializes a new instance of the class. + + + The that holds the serialized object + data about the exception being thrown. + + + The that contains contextual information about the source or destination. + + + + + Converts the given SQLException into NHibernate's ADOException hierarchy, as well as performing + appropriate logging. + + The converter to use. + The exception to convert. + An optional error message. + The SQL executed. + The converted . + + + + Converts the given SQLException into NHibernate's ADOException hierarchy, as well as performing + appropriate logging. + + The converter to use. + The exception to convert. + An optional error message. + The converted . + + + For the given , locates the . + The exception from which to extract the + The , or null. + + + + Implementation of ADOException indicating that the requested DML operation + resulted in a violation of a defined integrity constraint. + + + + + Returns the name of the violated constraint, if known. + + The name of the violated constraint, or null if not known. + + + + Implementation of ADOException indicating that evaluation of the + valid SQL statement against the given data resulted in some + illegal operation, mismatched types or incorrect cardinality. + + + + + The Configurable interface defines the contract for impls that + want to be configured prior to usage given the currently defined Hibernate properties. + + + + Configure the component, using the given settings and properties. + All defined startup properties. + + + + Defines a contract for implementations that know how to convert a + into NHibernate's hierarchy. + + + Inspired by Spring's SQLExceptionTranslator. + + Implementations must have a constructor which takes a + parameter. + + Implementations may implement if they need to perform + configuration steps prior to first use. + + + + + + Convert the given into NHibernate's ADOException hierarchy. + + The to be converted. + An optional error message. + The SQL that generate the exception + The resulting ADOException. + + + + Implementation of ADOException indicating a problem acquiring lock + on the database. + + + + A factory for building SQLExceptionConverter instances. + + + Build a SQLExceptionConverter instance. + The defined dialect. + The configuration properties. + An appropriate instance. + + First, looks for a 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. + + + + + Builds a minimal converter. The instance returned here just always converts to . + + The minimal converter. + + + + Implementation of ADOException indicating that the SQL sent to the database + server was invalid (syntax error, invalid object references, etc). + + + + + A SQLExceptionConverter implementation which performs no converion of + the underlying . + Interpretation of a SQL error based on + is not possible as using the ErrorCode (which is, however, vendor- + specific). Use of a ErrorCode-based converter should be preferred approach + for converting/interpreting SQLExceptions. + + + + Handle an exception not converted to a specific type based on the SQLState. + The exception to be handled. + An optional message + Optionally, the sql being performed when the exception occurred. + The converted exception; should never be null. + + + + Generates translators which uses the older hand-written parser to perform the translation. + + + + + Facade for generation of + and instances. + + + + + Construct a instance + capable of translating an HQL query string. + + + The query-identifier (used in collection). + This is typically the same as the queryString parameter except for the case of + split polymorphic queries which result in multiple physical sql queries. + + The query string to be translated + Currently enabled filters + The session factory + An appropriate translator. + + + + Construct a instance capable of + translating an HQL filter string. + + + The query-identifier (used in collection). + This is typically the same as the queryString parameter except for the case of + split polymorphic queries which result in multiple physical sql queries. + + The query string to be translated + Currently enabled filters + The session factory + An appropriate translator. + + + + Parses the hibernate query into its constituent clauses. + + + + + A parser is a state machine that accepts a string of tokens, + bounded by start() and end() and modifies a QueryTranslator. Parsers + are NOT intended to be threadsafe. They SHOULD be reuseable + for more than one token stream. + + + + + + + + + + + + + + + + + + + + + + + + Parses the from clause of a hibernate query, looking for tables and + aliases for the SQL query. + + + + + + + + FromPathExpressionParser + + + + + Parses an expression of the form foo.bar.baz and builds up an expression + involving two less table joins than there are path components. + + + + + + + + + + NOTE: we avoid joining to the next table if the named property is just the foreign key value + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Used to hold column type in nested functions. + + + + + Parses the GROUP BY clause of an aggregate query + + + + + Parses the having clause of a hibernate query and translates it to an + SQL having clause. + + + + Parses the where clause of a hibernate query and translates it to an + SQL where clause. + + + + + + + + + + + + + + + + + + + + + + + + Parses the ORDER BY clause of a query + + + + + + + HQL lexical analyzer (not really a parser) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + An instance of QueryTranslator translates a Hibernate query string to SQL. + + + + + Abstract superclass of object loading (and querying) strategies. + + +

+ This class implements useful common functionality that concrete loaders would delegate to. + It is not intended that this functionality would be directly accessed by client code (Hence, + all methods of this class are declared protected or private.) This class relies heavily upon the + interface, which is the contract between this class and + s that may be loaded by it. +

+

+ The present implementation is able to load any number of columns of entities and at most + one collection role per query. +

+
+
+ + + What lock mode does this load entities with? + + A Collection of lock modes specified dynamically via the Query Interface + + + + + Append FOR UPDATE OF clause, if necessary. This + empty superclass implementation merely returns its first + argument. + + + + + Does this query return objects that might be already cached by + the session, whose lock mode may need upgrading. + + + + + + Modify the SQL, adding lock hints and comments, if necessary + + + + + Execute an SQL query and attempt to instantiate instances of the class mapped by the given + persister from each row of the DataReader. If an object is supplied, will attempt to + initialize that object. If a collection is supplied, attempt to initialize that collection. + + + + + Loads a single row from the result set. This is the processing used from the + ScrollableResults where no collection fetches were encountered. + + The result set from which to do the load. + The session from which the request originated. + The query parameters specified by the user. + Should proxies be generated + The loaded "row". + + + + + Read any collection elements contained in a single row of the result set + + + + + Get the actual object that is returned in the user-visible result list. + + + This empty implementation merely returns its first argument. This is + overridden by some subclasses. + + + + + For missing objects associated by one-to-one with another object in the + result set, register the fact that the the object is missing with the + session. + + + + + Read one collection element from the current row of the ADO.NET result set + + + + + If this is a collection initializer, we need to tell the session that a collection + is being initilized, to account for the possibility of the collection having + no elements (hence no rows in the result set). + + + + + Read a row of EntityKeys from the IDataReader into the given array. + + + Warning: this method is side-effecty. If an id is given, don't bother going + to the IDataReader + + + + + + + + + + + Check the version of the object in the IDataReader against + the object version in the session cache, throwing an exception + if the vesrion numbers are different. + + + + + + + + + + + + Resolve any ids for currently loaded objects, duplications within the IDataReader, + etc. Instanciate empty objects to be initialized from the IDataReader. Return an + array of objects (a row of results) and an array of booleans (by side-effect) that determine + wheter the corresponding object should be initialized + + + + + The entity instance is already in the session cache + + + + + The entity instance is not in the session cache + + + + + Hydrate the state of an object from the SQL IDataReader, into + an array of "hydrated" values (do not resolve associations yet), + and pass the hydrated state to the session. + + + + + Determine the concrete class of an instance for the IDataReader + + + + + Advance the cursor to the first required row of the IDataReader + + + + + + + Should we pre-process the SQL string, adding a dialect-specific + LIMIT clause. + + + + + + + + Bind positional parameter values to the IDbCommand + (these are parameters specified by ?). + + + + + + + + + + Obtain an IDbCommand with all parameters pre-bound. Bind positional parameters, + named parameters, and limit parameters. + + + Creates an IDbCommand object and populates it with the values necessary to execute it against the + database to Load an Entity. + + The to use for the IDbCommand. + TODO: find out where this is used... + The SessionImpl this Command is being prepared in. + A CommandWrapper wrapping an IDbCommand that is ready to be executed. + + + + Some dialect-specific LIMIT clauses require the maximum last row number, + others require the maximum returned row count. + + + + + Bind parameters needed by the dialect-specific LIMIT clause + + The number of parameters bound + + + + Limits the number of rows returned by the Sql query if necessary. + + The IDbCommand to limit. + The RowSelection that contains the MaxResults info. + TODO: This does not apply to ADO.NET at all + + + + Fetch a IDbCommand, call SetMaxRows and then execute it, + advance to the first result and return an SQL IDataReader + + The to execute. + The to apply to the and . + true if result types need to be auto-discovered by the loader; false otherwise. + The to load in. + + An IDataReader advanced to the first record in RowSelection. + + + + Bind named parameters to the IDbCommand + + The that contains the parameters. + The named parameters (key) and the values to set. + The this Loader is using. + + + + + Called by subclasses that load entities + + + + + Called by subclasses that batch load entities + + + + + Called by subclasses that load collections + + + + + Called by wrappers that batch initialize collections + + + + + Called by subclasses that batch initialize collections + + + + + Return the query results, using the query cache, called + by subclasses that implement cacheable queries + + + + + + + + + + Actually execute a query, ignoring the query cache + + + + + + + + Calculate and cache select-clause suffixes. Must be + called by subclasses after instantiation. + + + + of + + + + The SqlString to be called; implemented by all subclasses + + + + The setter was added so that class inheriting from Loader could write a + value using the Property instead of directly to the field. + + + The scope is protected internal because the needs to + be able to get the SqlString of the when + it is parsing a subquery. + + + + + + An array of persisters of entity classes contained in each row of results; + implemented by all subclasses + + + The setter was added so that classes inheriting from Loader could write a + value using the Property instead of directly to the field. + + + + + An array of indexes of the entity that owns a one-to-one association + to the entity at the given index (-1 if there is no "owner") + + + + + An (optional) persister for a collection to be initialized; only collection loaders + return a non-null value + + + + + Get the index of the entity that owns the collection, or -1 + if there is no owner in the query results (i.e. in the case of a + collection initializer) or no collection. + + + + + Return false is this loader is a batch entity loader + + + + + Get the SQL table aliases of entities whose + associations are subselect-loadable, returning + null if this loader does not support subselect + loading + + + + + Identifies the query for statistics reporting, if null, + no statistics will be reported + + + + + Get the result set descriptor + + + + + Utility method that generates 0_, 1_ suffixes. Subclasses don't + necessarily need to use this algorithm, but it is intended that + they will in most cases. + + + + + Specialized interface for filters. + + + + + Defines the constract of an HQL->SQL translator. + + + + + Compile a "normal" query. This method may be called multiple times. Subsequent invocations are no-ops. + + Defined query substitutions. + Does this represent a shallow (scalar or entity-id) select? + There was a problem parsing the query string. + There was a problem querying defined mappings. + + + + Perform a list operation given the underlying query definition. + + The session owning this query. + The query bind parameters. + The query list results. + + + + + Perform a bulk update/delete operation given the underlying query defintion. + + The query bind parameters. + The session owning this query. + The number of entities updated or deleted. + + + + + Returns the column names in the generated SQL. + + the column names in the generated SQL. + + + + Information about any parameters encountered during translation. + + + + + The set of query spaces (table names) that the query referrs to. + + + + + The SQL string generated by the translator. + + + + + The HQL string processed by the translator. + + + + + Returns the filters enabled for this query translator. + + Filters enabled for this query execution. + + + + Returns an array of Types represented in the query result. + + Query return types. + + + + Returns an array of HQL aliases + + Returns an array of HQL aliases + + + + Does the translated query contain collection fetches? + + True if the query does contain collection fetched; false otherwise. + + + + Compile a filter. This method may be called multiple + times. Subsequent invocations are no-ops. + + the role name of the collection used as the basis for the filter. + Defined query substitutions. + Does this represent a shallow (scalar or entity-id) select? + + + Construct a query translator + + A unique identifier for the query of which this + translation is part; typically this is the original, user-supplied query string. + + + The "preprocessed" query string; at the very least + already processed by {@link org.hibernate.hql.QuerySplitter}. + + Any enabled filters. + The session factory. + + + + Construct a query translator + + + + + Compile a subquery + + + + + + Compile a "normal" query. This method may be called multiple + times. Subsequent invocations are no-ops. + + + + + Compile a filter. This method may be called multiple + times. Subsequent invocations are no-ops. + + + + + Compile the query (generate the SQL). + + + + + WARNING: side-effecty + + + + + Extract the complete clause of function. + + The list of tokens + The index of the list that represent the founded function. + String trepresentation of each token. + Each token can be string or SqlString + + + Used for collection filters + + + + + + + Persisters for the return values of a List style query + + + The Persisters stored by QueryTranslator have to be . The + setter will attempt to cast the ILoadable array passed in into an + IQueryable array. + + + + + Types of the return values of an Enumerate() style query. + Return an array of s. + + + + + + + + Is this query called by Scroll() or Iterate()? + + true if it is, false if it is called by find() or list() + + + + + + + + + + Parsers the select clause of a hibernate query, looking + for a table (well, really class) alias. + + + + + + + + + + + + + + + + + + + + + + + Wraps SessionFactoryImpl, adding more lookup behaviors and encapsulating some of the error handling. + + + + + Provides utility methods for generating HQL / SQL names. + Shared by both the 'classic' and 'new' query translators. + + + + + A problem occurred translating a Hibernate query to SQL due to invalid query syntax, etc. + + + + + Initializes a new instance of the class. + + The message that describes the error. + + + + Initializes a new instance of the class. + + The message that describes the error. + + The exception that is the cause of the current exception. If the innerException parameter + is not a null reference, the current exception is raised in a catch block that handles + the inner exception. + + + + + Initializes a new instance of the class. + + The message that describes the error. + The query that contains the error. + + + + Initializes a new instance of the class. + + + The exception that is the cause of the current exception. If the innerException parameter + is not a null reference, the current exception is raised in a catch block that handles + the inner exception. + + + + + Initializes a new instance of the class + with serialized data. + + + The that holds the serialized object + data about the exception being thrown. + + + The that contains contextual information about the source or destination. + + + + + Sets the serialization info for after + getting the info from the base Exception. + + + The that holds the serialized object + data about the exception being thrown. + + + The that contains contextual information about the source or destination. + + + + + Gets or sets the of HQL that caused the Exception. + + + + + Gets a message that describes the current . + + The error message that explains the reason for this exception including the HQL. + + + + Handle Hibernate "implicit" polymorphism, by translating the query string into + several "concrete" queries against mapped classes. + + + + + + + + + Abstract InsertGeneratedIdentifierDelegate implementation where the + underlying strategy causes the generated identitifer to be returned as an + effect of performing the insert statement. Thus, there is no need for an + additional sql statement to determine the generated identitifer. + + + + + Responsible for handling delegation relating to variants in how + insert-generated-identifier generator strategies dictate processing: +
    +
  • building the sql insert statement
  • +
  • determination of the generated identifier value
  • +
+
+
+ + + Build a specific to the delegate's mode + of handling generated key values. + + The insert object. + + + + Perform the indicated insert SQL statement and determine the identifier value generated. + + + + + The generated identifier value. + + + + Abstract InsertGeneratedIdentifierDelegate implementation where the + underlying strategy requires an subsequent select after the insert + to determine the generated identifier. + + + + Extract the generated key value from the given result set. + The session + The result set containing the generated primay key values. + The entity being saved. + The generated identifier + + + Bind any required parameter values into the SQL command {@link #getSelectSQL}. + The session + The prepared {@link #getSelectSQL SQL} command + The entity being saved. + + + Get the SQL statement to be used to retrieve generated key values. + The SQL command string + + + + Nothing more than a distinguishing subclass of Insert used to indicate + intent. + Some subclasses of this also provided some additional + functionality or semantic to the genernated SQL statement string. + + + + + A class that builds an INSERT sql statement. + + + + + + + + Builds a SqlString from the internal data. + + A valid SqlString that can be converted into an IDbCommand + + + + Adds the Property's columns to the INSERT sql + + The column name for the Property + The IType of the property. + The SqlInsertBuilder. + The column will be asociated with a parameter. + + + + Add a column with a specific value to the INSERT sql + + The name of the Column to add. + The value to set for the column. + The NHibernateType to use to convert the value to a sql string. + The SqlInsertBuilder. + + + + Add a column with a specific value to the INSERT sql + + The name of the Column to add. + A valid sql string to set as the value of the column. + The SqlInsertBuilder. + + + + Specialized IdentifierGeneratingInsert which appends the database + specific clause which signifies to return generated IDENTITY values + to the end of the insert statement. + + + + + The general contract between a class that generates unique + identifiers and the . + + + + It is not intended that this interface ever be exposed to the + application. It is intended that users implement this interface + to provide custom identifier generation strategies. + + + Implementors should provide a public default constructor. + + + Implementations that accept configuration parameters should also + implement . + + + Implementors must be threadsafe. + + + + + + Generate a new identifier + + The this id is being generated in. + The entity for which the id is being generated. + The new identifier + + + + The IdentityGenerator for autoincrement/identity key generation. + + The this id is being generated in. + The entity the id is being generated for. + + IdentityColumnIndicator Indicates to the Session that identity (i.e. identity/autoincrement column) + key generation should be used. + + + + + An that returns the current identifier + assigned to an instance. + + +

+ This id generation strategy is specified in the mapping file as + <generator class="assigned" /> +

+
+
+ + + + + + Generates a new identifier by getting the value of the identifier + for the obj parameter. + + The this id is being generated in. + The entity for which the id is being generated. + The value that was assigned to the mapped id's property. + + Thrown when a is passed in as the obj or + if the identifier of obj is null. + + + + + An that returns a Int64 constructed from the system + time and a counter value. Not safe for use in a clustser! + + + + + An that uses the value of + the id property of an associated object + + + + This id generation strategy is specified in the mapping file as + + <generator class="foreign"> + <param name="property">AssociatedObject</param> + </generator> + + + The mapping parameter property is required. + + + + + An IdentiferGenerator that supports "configuration". + + + + + Configure this instance, given the values of parameters + specified by the user as <param> elements. + This method is called just once, followed by instantiation. + + The the identifier should be. + An of Param values that are keyed by parameter name. + The to help with Configuration. + + + + Generates an identifer from the value of a Property. + + The this id is being generated in. + The entity for which the id is being generated. + + The identifier value from the associated object or + if the session + already contains obj. + + + + + Configures the ForeignGenerator by reading the value of property + from the parms parameter. + + The the identifier should be. + An of Param values that are keyed by parameter name. + The to help with Configuration. + + Thrown if the key property is not found in the parms parameter. + + + + + An that generates values + using a strategy suggested Jimmy Nilsson's + article + on informit.com. + + +

+ This id generation strategy is specified in the mapping file as + <generator class="guid.comb" /> +

+

+ The comb algorithm is designed to make the use of GUIDs as Primary Keys, Foreign Keys, + and Indexes nearly as efficient as ints. +

+

+ This code was contributed by Donald Mull. +

+
+
+ + + Generate a new using the comb algorithm. + + The this id is being generated in. + The entity for which the id is being generated. + The new identifier as a . + + + + Generate a new using the comb algorithm. + + + + + An that generates values + using Guid.NewGuid(). + + +

+ This id generation strategy is specified in the mapping file as + <generator class="guid" /> +

+
+
+ + + Generate a new for the identifier. + + The this id is being generated in. + The entity for which the id is being generated. + The new identifier as a . + + + + Thrown by implementation class when ID generation fails + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The message that describes the error. + + + + Initializes a new instance of the class. + + The message that describes the error. + + The exception that is the cause of the current exception. If the innerException parameter + is not a null reference, the current exception is raised in a catch block that handles + the inner exception. + + + + + Initializes a new instance of the class + with serialized data. + + + The that holds the serialized object + data about the exception being thrown. + + + The that contains contextual information about the source or destination. + + + + + Factory methods for IdentifierGenerator framework. + + +

The built in strategies for identifier generation in NHibernate are:

+ + + strategy + Implementation of strategy + + + assigned + + + + counter + + + + foreign + + + + guid + + + + guid.comb + + + + hilo + + + + identity + + + + native + + Chooses between , + , and based on the + 's capabilities. + + + + seqhilo + + + + sequence + + + + uuid.hex + + + + uuid.string + + + +
+
+ + Get the generated identifier when using identity columns + The to read the identifier value from. + The the value should be converted to. + The the value is retrieved in. + The value for the identifier. + + + + Gets the value of the identifier from the and + ensures it is the correct . + + The to read the identifier value from. + The the value should be converted to. + The the value is retrieved in. + + The value for the identifier. + + + Thrown if there is any problem getting the value from the + or with converting it to the . + + + + + An where the key is the strategy and + the value is the for the strategy. + + + + + When this is returned by Generate() it indicates that the object + has already been saved. + + + String.Empty + + + + + When this is return + + + + + Initializes the static fields in . + + + + + Creates an from the named strategy. + + + The name of the generator to create. This can be one of the NHibernate abbreviations (ie - native, + sequence, guid.comb, etc...), a full class name if the Type is in the NHibernate assembly, or + a full type name if the strategy is in an external assembly. + + The that the retured identifier should be. + An of <param> values from the mapping. + The to help with Configuration. + + An instantiated and configured . + + + Thrown if there are any exceptions while creating the . + + + + + Create the correct boxed for the identifier. + + The value of the new identifier. + The the identifier should be. + + The identifier value converted to the . + + + The type parameter must be an , , + or . + + + + + An that indicates to the that identity + (ie. identity/autoincrement column) key generation should be used. + + +

+ This id generation strategy is specified in the mapping file as + <generator class="identity" /> + or if the database natively supports identity columns + <generator class="native" /> +

+

+ This indicates to NHibernate that the database generates the id when + the entity is inserted. +

+
+
+ + + Delegate for dealing with IDENTITY columns where the dialect supports returning + the generated IDENTITY value directly from the insert statement. + + + + + Delegate for dealing with IDENTITY columns where the dialect requires an + additional command execution to retrieve the generated IDENTITY value + + + + The configuration parameter holding the entity name + + + + An IIdentifierGenerator that returns a Int64, constructed by + counting from the maximum primary key value at startup. Not safe for use in a + cluster! + + + + java author Gavin King, .NET port Mark Holden + + + Mapping parameters supported, but not usually needed: table, column. + + + + + + + + + + + + + + + + + + + + + The configuration parameter holding the schema name + + + + The configuration parameter holding the table name for the + generated id + + + + + The configuration parameter holding the table names for all + tables for which the id must be unique + + + + + The configuration parameter holding the primary key column + name of the generated id + + + + The configuration parameter holding the catalog name + + + + An that requires creation of database objects + All s that also implement + An have access to a special mapping parameter: schema + + + + + The SQL required to create the underlying database objects + + The to help with creating the sql. + + An array of objects that contain the sql to create the + necessary database objects. + + + + + The SQL required to remove the underlying database objects + + The to help with creating the sql. + + A that will drop the database objects. + + + + + Return a key unique to the underlying database objects. + + + A key unique to the underlying database objects. + + + Prevents us from trying to create/remove them multiple times + + + + + A persister that may have an identity assigned by execution of a SQL INSERT. + + + + + Concrete IEntityPersisters implement mapping and persistence logic for a particular class. + + + Implementors must be threadsafe (preferrably immutable) and must provide a constructor of type + matching the signature of: (PersistentClass, SessionFactoryImplementor) + + + + + Finish the initialization of this object, once all ClassPersisters have been + instantiated. Called only once, before any other method. + + + + + Determine whether the given name represents a subclass entity + (or this entity itself) of the entity mapped by this persister. + + The entity name to be checked. + + True if the given entity name represents either the entity mapped by this persister or one of its subclass entities; + false otherwise. + + + + + Get the type of a particular property + + + + + + Locate the property-indices of all properties considered to be dirty. + The current state of the entity (the state to be checked). + The previous state of the entity (the state to be checked against). + The entity for which we are checking state dirtiness. + The session in which the check is ccurring. + or the indices of the dirty properties + + + Locate the property-indices of all properties considered to be dirty. + The old state of the entity. + The current state of the entity. + The entity for which we are checking state modification. + The session in which the check is ccurring. + return or the indicies of the modified properties + + + + Retrieve the current state of the natural-id properties from the database. + + + The identifier of the entity for which to retrieve the naturak-id values. + + + The session from which the request originated. + + The natural-id snapshot. + + + + Load an insatance of the persistent class. + + + + + Do a version check (optional operation) + + + + + Persist an instance + + + + + Persist an instance, using a natively generated identifier (optional operation) + + + + + Delete a persistent instance + + + + + Update a persistent instance + + The id. + The fields. + The dirty fields. + if set to [has dirty collection]. + The old fields. + The old version. + The obj. + The rowId + The session. + + + + Get the current database state of the object, in a "hydrated" form, without resolving identifiers + + + + if select-before-update is not enabled or not supported + + + + Get the current version of the object, or return null if there is no row for + the given identifier. In the case of unversioned data, return any object + if the row exists. + + + + + + + Try to discover the entity mode from the entity instance + + + Has the class actually been bytecode instrumented? + + + Called just after the entities properties have been initialized + + + Called just after the entity has been reassociated with the session + + + + Create a new proxy instance + + + + + + + Is this a new transient instance? + + + Return the values of the insertable properties of the object (including backrefs) + + + + Perform a select to retrieve the values of any generated properties + back from the database, injecting these generated values into the + given entity as well as writing this state to the persistence context. + + + Note, that because we update the persistence context here, callers + need to take care that they have already written the initial snapshot + to the persistence context before calling this method. + + The entity's id value. + The entity for which to get the state. + The entity state (at the time of Save). + The session. + + + + Perform a select to retrieve the values of any generated properties + back from the database, injecting these generated values into the + given entity as well as writing this state to the persistence context. + + + Note, that because we update the persistence context here, callers + need to take care that they have already written the initial snapshot + to the persistence context before calling this method. + + The entity's id value. + The entity for which to get the state. + The entity state (at the time of Save). + The session. + + + + The persistent class, or null + + + + + Does the class implement the ILifecycle inteface? + + + + + Does the class implement the IValidatable interface? + + + + + Get the proxy interface that instances of this concrete class will be cast to + + + + + Set the given values to the mapped properties of the given object + + + + + Set the value of a particular property + + + + + Return the values of the mapped properties of the object + + + + + Get the value of a particular property + + + + + Get the value of a particular property + + + + + Get the identifier of an instance ( throw an exception if no identifier property) + + + + + Set the identifier of an instance (or do nothing if no identifier property) + + The object to set the Id property on. + The value to set the Id property to. + The EntityMode + + + + Get the version number (or timestamp) from the object's version property (or return null if not versioned) + + + + + Create a class instance initialized with the given identifier + + + + + Determines whether the specified entity is an instance of the class + managed by this persister. + + The entity. + The EntityMode + + if the specified entity is an instance; otherwise, . + + + + Does the given instance have any uninitialized lazy properties? + + + + Set the identifier and version of the given instance back + to its "unsaved" value, returning the id + + + + Get the persister for an instance of this class or a subclass + + + + Check the version value trough . + + The snapshot entity state + The result of . + NHibernate-specific feature, not present in H3.2 + + + + The ISessionFactory to which this persister "belongs". + + + + + Returns an object that identifies the space in which identifiers of + this entity hierarchy are unique. + + + + + The entity name which this persister maps. + + + + + Retrieve the underlying entity metamodel instance... + + The metamodel + + + + Returns an array of objects that identify spaces in which properties of + this entity are persisted, for instances of this class only. + + The property spaces. + + For most implementations, this returns the complete set of table names + to which instances of the mapped entity are persisted (not accounting + for superclass entity mappings). + + + + + Returns an array of objects that identify spaces in which properties of + this entity are persisted, for instances of this class and its subclasses. + + + Much like , except that here we include subclass + entity spaces. + + The query spaces. + + + + Are instances of this class mutable? + + + + + Determine whether the entity is inherited one or more other entities. + In other words, is this entity a subclass of other entities. + + True if other entities extend this entity; false otherwise. + + + + Is the identifier assigned before the insert by an IDGenerator or is it returned + by the Insert() method? + + + This determines which form of Insert() will be called. + + + + + Are instances of this class versioned by a timestamp or version number column? + + + + + Get the type of versioning (optional operation) + + + + + Which property holds the version number? (optional operation) + + + + + If the entity defines a natural id (), which + properties make up the natural id. + + + The indices of the properties making of the natural id; or + null, if no natural id is defined. + + + + + Return the IIdentifierGenerator for the class + + + + + Get the Hibernate types of the class properties + + + + + Get the names of the class properties - doesn't have to be the names of the actual + .NET properties (used for XML generation only) + + + + + Gets if the Property is insertable. + + if the Property's value can be inserted. + + This is for formula columns and if the user sets the insert attribute on the <property> element. + + + + Which of the properties of this class are database generated values on insert? + + + Which of the properties of this class are database generated values on update? + + + + Properties that may be dirty (and thus should be dirty-checked). These + include all updatable properties and some associations. + + + + + Get the nullability of the properties of this class + + + + + Get the "versionability" of the properties of this class (is the property optimistic-locked) + + if the property is optimistic-locked; otherwise, . + + + + Get the cascade styles of the properties (optional operation) + + + + + Get the identifier type + + + + + Get the name of the indentifier property (or return null) - need not return the + name of an actual .NET property + + + + + Should we always invalidate the cache instead of recaching updated state + + + + + Should lazy properties of this entity be cached? + + + + + Get the cache (optional operation) + + + + Get the cache structure + + + + Get the user-visible metadata for the class (optional operation) + + + + + Is batch loading enabled? + + + + Is select snapshot before update enabled? + + + + Does this entity contain a version property that is defined + to be database generated? + + + + + Does this class support dynamic proxies? + + + + + Do instances of this class contain collections? + + + + + Determine whether any properties of this entity are considered mutable. + + + True if any properties of the entity are mutable; false otherwise (meaning none are). + + + + + Determine whether this entity contains references to persistent collections + which are fetchable by subselect? + + + True if the entity contains collections fetchable by subselect; false otherwise. + + + + + Does this class declare any cascading save/update/deletes? + + + + + Does the class have a property holding the identifier value? + + + + + Determine whether detahced instances of this entity carry their own + identifier value. + + + True if either (1) or + (2) the identifier is an embedded composite identifier; false otherwise. + + + The other option is the deperecated feature where users could supply + the id during session calls. + + + + + Determine whether this entity defines a natural identifier. + + True if the entity defines a natural id; false otherwise. + + + + Determine whether this entity defines any lazy properties (ala + bytecode instrumentation). + + + True if the entity has properties mapped as lazy; false otherwise. + + + + + Gets if the Property is updatable + + if the Property's value can be updated. + + This is for formula columns and if the user sets the update attribute on the <property> element. + + + + + Does this class have a cache? + + + + + Does this entity define any properties as being database-generated on insert? + + + + + Does this entity define any properties as being database-generated on update? + + + + + Get a SQL select string that performs a select based on a unique + key determined by the given property name). + + + The name of the property which maps to the + column(s) to use in the select statement restriction. + + The SQL select string + + + + Get the database-specific SQL command to retrieve the last + generated IDENTITY value. + + + + The names of the primary key columns in the root table. + The primary key column names. + + + + An that generates Int64 values using an + oracle-style sequence. A higher performance algorithm is + . + + +

+ This id generation strategy is specified in the mapping file as + + <generator class="sequence"> + <param name="sequence">uid_sequence</param> + <param name="schema">db_schema</param> + </generator> + +

+

+ The sequence parameter is required while the schema is optional. +

+
+
+ + + The name of the sequence parameter. + + + + + The parameters parameter, appended to the create sequence DDL. + For example (Oracle): INCREMENT BY 1 START WITH 1 MAXVALUE 100 NOCACHE. + + + + + Configures the SequenceGenerator by reading the value of sequence and + schema from the parms parameter. + + The the identifier should be. + An of Param values that are keyed by parameter name. + The to help with Configuration. + + + + Generate an , , or + for the identifier by using a database sequence. + + The this id is being generated in. + The entity for which the id is being generated. + The new identifier as a , , or . + + + + The SQL required to create the database objects for a SequenceGenerator. + + The to help with creating the sql. + + An array of objects that contain the Dialect specific sql to + create the necessary database objects for the SequenceGenerator. + + + + + The SQL required to remove the underlying database objects for a SequenceGenerator. + + The to help with creating the sql. + + A that will drop the database objects for the SequenceGenerator. + + + + + Return a key unique to the underlying database objects for a SequenceGenerator. + + + The configured sequence name. + + + + + An that combines a hi/lo algorithm with an underlying + oracle-style sequence that generates hi values. + + +

+ This id generation strategy is specified in the mapping file as + + <generator class="seqhilo"> + <param name="sequence">uid_sequence</param> + <param name="max_lo">max_lo_value</param> + <param name="schema">db_schema</param> + </generator> + +

+

+ The sequence parameter is required, the max_lo and schema are optional. +

+

+ The user may specify a max_lo value to determine how often new hi values are + fetched. If sequences are not avaliable, TableHiLoGenerator might be an + alternative. +

+
+
+ + + The name of the maximum low value parameter. + + + + + Configures the SequenceHiLoGenerator by reading the value of sequence, max_lo, + and schema from the parms parameter. + + The the identifier should be. + An of Param values that are keyed by parameter name. + The to help with Configuration. + + + + Generate an , , or + for the identifier by using a database sequence. + + The this id is being generated in. + The entity for which the id is being generated. + The new identifier as a , , or . + + + + An that uses a database table to store the last + generated value. + + +

+ It is not intended that applications use this strategy directly. However, + it may be used to build other (efficient) strategies. The return type is + System.Int32 +

+

+ The hi value MUST be fetched in a seperate transaction to the ISession + transaction so the generator must be able to obtain a new connection and commit it. + Hence this implementation may not be used when the user is supplying connections. +

+

+ The mapping parameters table and column are required. +

+
+
+ + + An additional where clause that is added to + the queries against the table. + + + + + The name of the column parameter. + + + + + The name of the table parameter. + + + + Default column name + + + Default table name + + + + Configures the TableGenerator by reading the value of table, + column, and schema from the parms parameter. + + The the identifier should be. + An of Param values that are keyed by parameter name. + The to help with Configuration. + + + + Generate a , , or + for the identifier by selecting and updating a value in a table. + + The this id is being generated in. + The entity for which the id is being generated. + The new identifier as a , , or . + + + + The SQL required to create the database objects for a TableGenerator. + + The to help with creating the sql. + + An array of objects that contain the Dialect specific sql to + create the necessary database objects and to create the first value as 1 + for the TableGenerator. + + + + + The SQL required to remove the underlying database objects for a TableGenerator. + + The to help with creating the sql. + + A that will drop the database objects for the TableGenerator. + + + + + Return a key unique to the underlying database objects for a TableGenerator. + + + The configured table name. + + + + + An that returns an Int64, constructed using + a hi/lo algorithm. + + +

+ This id generation strategy is specified in the mapping file as + + <generator class="hilo"> + <param name="table">table</param> + <param name="column">id_column</param> + <param name="max_lo">max_lo_value</param> + <param name="schema">db_schema</param> + </generator> + +

+

+ The table and column parameters are required, the max_lo and + schema are optional. +

+

+ The hi value MUST be fecthed in a seperate transaction to the ISession + transaction so the generator must be able to obtain a new connection and + commit it. Hence this implementation may not be used when the user is supplying + connections. In that case a would be a + better choice (where supported). +

+
+
+ + + The name of the max lo parameter. + + + + + Configures the TableHiLoGenerator by reading the value of table, + column, max_lo, and schema from the parms parameter. + + The the identifier should be. + An of Param values that are keyed by parameter name. + The to help with Configuration. + + + + Generate a for the identifier by selecting and updating a value in a table. + + The this id is being generated in. + The entity for which the id is being generated. + The new identifier as a . + + + + An that returns a string of length + 32, 36, or 38 depending on the configuration. + + +

+ This id generation strategy is specified in the mapping file as + + <generator class="uuid.hex"> + <param name="format">format_string</param> + <param name="seperator">seperator_string</param> + </generator> + +

+

+ The format and seperator parameters are optional. +

+

+ The identifier string will consist of only hex digits. Optionally, the identifier string + may be generated with enclosing characters and seperators between each component + of the UUID. If there are seperators then the string length will be 36. If a format + that has enclosing brackets is used, then the string length will be 38. +

+

+ format is either + "N" (xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx), + "D" (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx), + "B" ({xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}), + or "P" ((xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)). These formats are described in + the Guid.ToString(String) method. + If no format is specified the default is "N". +

+

+ seperator is the char that will replace the "-" if specified. If no value is + configured then the default seperator for the format will be used. If the format "D", "B", or + "P" is specified, then the seperator will replace the "-". If the format is "N" then this + parameter will be ignored. +

+

+ This class is based on +

+
+
+ + + Generate a new for the identifier using the "uuid.hex" algorithm. + + The this id is being generated in. + The entity for which the id is being generated. + The new identifier as a . + + + + Configures the UUIDHexGenerator by reading the value of format and + seperator from the parms parameter. + + The the identifier should be. + An of Param values that are keyed by parameter name. + The to help with Configuration. + + + + Generate a Guid into a string using the format. + + A new Guid string + + + + An that returns a string of length + 16. + + +

+ This id generation strategy is specified in the mapping file as + <generator class="uuid.string" /> +

+ + The identifier string will NOT consist of only alphanumeric characters. Use + this only if you don't mind unreadable identifiers. + + + This impelementation was known to be incompatible with Postgres. + +
+
+ + + Generate a new for the identifier using the "uuid.string" algorithm. + + The this id is being generated in. + The entity for which the id is being generated. + The new identifier as a . + + + + Base class to create queries in "detached mode" where the NHibernate session is not available. + + + + + The behaviour of each method is basically the same of methods. + The main difference is on : + If you mix with named parameters setter, if same param name are found, + the value of the parameter setter override the value read from the POCO. + + + + + Interface to create queries in "detached mode" where the NHibernate session is not available. + All methods have the same semantics as the corresponding methods of the interface. + + + + + Get an executable instance of , + to actually run the query. + + + + Set the maximum number of rows to retrieve. + + The maximum number of rows to retreive. + + + + Sets the first row to retrieve. + + The first row to retreive. + + + + Enable caching of this query result set. + + Should the query results be cacheable? + + + Set the name of the cache region. + The name of a query cache region, or + for the default query cache + + + + Entities retrieved by this query will be loaded in + a read-only mode where Hibernate will never dirty-check + them or make changes persistent. + + Enable/Disable read -only mode + + + + The timeout for the underlying ADO query + + + + + + Set the lockmode for the objects idententified by the + given alias that appears in the FROM clause. + + alias a query alias, or this for a collection filter + + + + + Bind a value to an indexed parameter. + + Postion of the parameter in the query, numbered from 0 + The possibly null parameter value + The Hibernate type + + + + Bind a value to a named query parameter + + The name of the parameter + The possibly null parameter value + The NHibernate . + + + + Bind a value to an indexed parameter, guessing the Hibernate type from + the class of the given object. + + The position of the parameter in the query, numbered from 0 + The non-null parameter value + + + + Bind a value to a named query parameter, guessing the NHibernate + from the class of the given object. + + The name of the parameter + The non-null parameter value + + + + Bind multiple values to a named query parameter. This is useful for binding a list + of values to an expression such as foo.bar in (:value_list) + + The name of the parameter + A collection of values to list + The Hibernate type of the values + + + + Bind multiple values to a named query parameter, guessing the Hibernate + type from the class of the first object in the collection. This is useful for binding a list + of values to an expression such as foo.bar in (:value_list) + + The name of the parameter + A collection of values to list + + + + Bind the property values of the given object to named parameters of the query, + matching property names with parameter names and mapping property types to + Hibernate types using heuristics. + + Any POCO + + + + Bind an instance of a to an indexed parameter + using an NHibernate . + + The position of the parameter in the query string, numbered from 0 + A non-null instance of a . + + + + Bind an instance of a to a named parameter + using an NHibernate . + + The name of the parameter + A non-null instance of a . + + + + Bind an instance of a array to an indexed parameter + using an NHibernate . + + The position of the parameter in the query string, numbered from 0 + A non-null instance of a array. + + + + Bind an instance of a array to a named parameter + using an NHibernate . + + The name of the parameter + A non-null instance of a array. + + + + Bind an instance of a to an indexed parameter + using an NHibernate . + + The position of the parameter in the query string, numbered from 0 + A non-null instance of a . + + + + Bind an instance of a to a named parameter + using an NHibernate . + + The name of the parameter + A non-null instance of a . + + + + Bind an instance of a to an indexed parameter + using an NHibernate . + + The position of the parameter in the query string, numbered from 0 + A non-null instance of a . + + + + Bind an instance of a to a named parameter + using an NHibernate . + + The name of the parameter + A non-null instance of a . + + + + Bind an instance of a to an indexed parameter + using an NHibernate . + + The position of the parameter in the query string, numbered from 0 + A non-null instance of a . + + + + Bind an instance of a to a named parameter + using an NHibernate . + + The name of the parameter + A non-null instance of a . + + + + Bind an instance of a to an indexed parameter + using an NHibernate . + + The position of the parameter in the query string, numbered from 0 + A non-null instance of a . + + + + Bind an instance of a to a named parameter + using an NHibernate . + + A non-null instance of a . + The name of the parameter + + + + Bind an instance of a to an indexed parameter + using an NHibernate . + + The position of the parameter in the query string, numbered from 0 + A non-null instance of a . + + + + Bind an instance of a to a named parameter + using an NHibernate . + + The name of the parameter + A non-null instance of a . + + + + Bind an instance of a to an indexed parameter + using an NHibernate . + + The position of the parameter in the query string, numbered from 0 + A non-null instance of a . + + + + Bind an instance of a to a named parameter + using an NHibernate . + + The name of the parameter + A non-null instance of a . + + + + Bind an instance of a mapped persistent class to an indexed parameter. + + Position of the parameter in the query string, numbered from 0 + A non-null instance of a persistent class + + + + Bind an instance of a mapped persistent class to a named parameter. + + The name of the parameter + A non-null instance of a persistent class + + + + Bind an instance of a persistent enumeration class to an indexed parameter + using an NHibernate . + + The position of the parameter in the query string, numbered from 0 + A non-null instance of a persistent enumeration + + + + Bind an instance of a persistent enumeration class to a named parameter + using an NHibernate . + + The name of the parameter + A non-null instance of a persistent enumeration + + + + Bind an instance of a to an indexed parameter + using an NHibernate . + + The position of the parameter in the query string, numbered from 0 + A non-null instance of a . + + + + Bind an instance of a to a named parameter + using an NHibernate . + + The name of the parameter + A non-null instance of a . + + + + Bind an instance of a to an indexed parameter + using an NHibernate . + + The position of the parameter in the query string, numbered from 0 + A non-null instance of a . + + + + Bind an instance of a to a named parameter + using an NHibernate . + + The name of the parameter + A non-null instance of a . + + + + Bind an instance of a to an indexed parameter + using an NHibernate . + + The position of the parameter in the query string, numbered from 0 + A non-null instance of a . + + + + Bind an instance of a to a named parameter + using an NHibernate . + + The name of the parameter + A non-null instance of a . + + + + Bind an instance of a to an indexed parameter + using an NHibernate . + + The position of the parameter in the query string, numbered from 0 + A non-null instance of a . + + + + Bind an instance of a to a named parameter + using an NHibernate . + + The name of the parameter + A non-null instance of a . + + + + Bind an instance of a to an indexed parameter + using an NHibernate . + + The position of the parameter in the query string, numbered from 0 + A non-null instance of a . + + + + Bind an instance of a to a named parameter + using an NHibernate . + + The name of the parameter + A non-null instance of a . + + + + Bind an instance of a to an indexed parameter + using an NHibernate . + + The position of the parameter in the query string, numbered from 0 + A non-null instance of a . + + + + Bind an instance of a to a named parameter + using an NHibernate . + + The name of the parameter + A non-null instance of a . + + + + Bind an instance of a to an indexed parameter + using an NHibernate . + + The position of the parameter in the query string, numbered from 0 + A non-null instance of a . + + + + Bind an instance of a to a named parameter + using an NHibernate . + + The name of the parameter + A non-null instance of a . + + + + Bind an instance of a to a named parameter + using an NHibernate . + + The position of the parameter in the query string, numbered from 0 + An instance of a . + + + + Bind an instance of a to a named parameter + using an NHibernate . + + The name of the parameter + An instance of a . + + + + Override the current session flush mode, just for this query. + + + + + Set a strategy for handling the query results. This can be used to change + "shape" of the query result. + + + + + Set the value to ignore unknow parameters names. + + True to ignore unknow parameters names. + + + Override the current session cache mode, just for this query. + The cache mode to use. + this (for method chaining) + + + + Interface for DetachedQuery implementors. + + + When you are working with queries in "detached mode" you may need some additional services like clone, + copy of parameters from another query and so on. + + + + + Copy all properties to a given . + + The given . + + Usually the implementation use to set properties to the . + This mean that existing properties are merged/overriden. + + + + + Set only parameters to a given . + + The given . + + Existing parameters are merged/overriden. + + + + + Override all properties reading new values from a given . + + The given origin. + + + + Override all parameters reading new values from a given . + + The given origin. + + + Override the current session cache mode, just for this query. + The cache mode to use. + this (for method chaining) + + + + Fill all properties. + + The . + + Query properties are overriden/merged. + + + + + Copy all properties to a given . + + The given . + + The method use to set properties of . + + + + + Set only parameters to a given . + + The given . + + The method use to set properties of . + Existing parameters in are merged/overriden. + + + + + Clear all existing parameters and copy new parameters from a given origin. + + The origin of parameters. + The current instance + If is null. + + + + Abstract implementation of the IQuery interface. + + + + + An object-oriented representation of a NHibernate query. + + + An IQuery instance is obtained by calling ISession.CreateQuery(). This interface + exposes some extra functionality beyond that provided by ISession.Iterate() and + ISession.List(); + + + A particulare page of the result set may be selected by calling + SetMaxResults(), SetFirstResult(). The generated sql + depends on the capabilities of the . Some + Dialects are for databases that have built in paging (LIMIT) and those capabilities + will be used to limit the number of records returned by the sql statement. + If the database does not support LIMITs then all of the records will be returned, + but the objects created will be limited to the specific results requested. + + Named query parameters may be used + + + Named query parameters are tokens of the form :name in the query string. A value is bound + to the Int32 parameter :foo by calling + + SetParameter("foo", foo, NHibernateUtil.Int32); + + for example. A name may appear multiple times in the query string. + + + Unnamed parameters ? are also supported. To bind a value to an unnamed + parameter use a Set method that accepts an Int32 positional argument - numbered from + zero. + + + You may not mix and match unnamed parameters and named parameters in the same query. + + + Queries are executed by calling List() or Iterate(). A query + may be re-executed by subsequent invocations. Its lifespan is, however, bounded by the lifespan + of the ISession that created it. + + + Implementors are not intended to be threadsafe. + + + + + + Return the query results as an . If the query contains multiple results + per row, the results are returned in an instance of object[]. + + +

+ Entities returned as results are initialized on demand. The first SQL query returns + identifiers only. +

+

+ This is a good strategy to use if you expect a high number of the objects + returned to be already loaded in the or in the 2nd level cache. +

+
+
+ + + Strongly-typed version of . + + + + + + + Return the query results as an . If the query contains multiple results per row, + the results are returned in an instance of object[]. + + The filled with the results. + + This is a good strategy to use if you expect few of the objects being returned are already loaded + or if you want to fill the 2nd level cache. + + + + + Return the query results an place them into the . + + The to place the results in. + + + + Strongly-typed version of . + + + + + Convenience method to return a single instance that matches + the query, or null if the query returns no results. + + the single result or + + Thrown when there is more than one matching result. + + + + + Strongly-typed version of . + + + + + Set the maximum number of rows to retrieve. + + The maximum number of rows to retreive. + + + + Sets the first row to retrieve. + + The first row to retreive. + + + + Enable caching of this query result set. + + Should the query results be cacheable? + + + Set the name of the cache region. + The name of a query cache region, or + for the default query cache + + + + Entities retrieved by this query will be loaded in + a read-only mode where Hibernate will never dirty-check + them or make changes persistent. + + + + + The timeout for the underlying ADO query + + + + + + Set the lockmode for the objects idententified by the + given alias that appears in the FROM clause. + + alias a query alias, or this for a collection filter + + + + + Bind a value to an indexed parameter. + + Postion of the parameter in the query, numbered from 0 + The possibly null parameter value + The Hibernate type + + + + Bind a value to a named query parameter + + The name of the parameter + The possibly null parameter value + The NHibernate . + + + + Bind a value to an indexed parameter, guessing the Hibernate type from + the class of the given object. + + The position of the parameter in the query, numbered from 0 + The non-null parameter value + + + + Bind a value to a named query parameter, guessing the NHibernate + from the class of the given object. + + The name of the parameter + The non-null parameter value + + + + Bind multiple values to a named query parameter. This is useful for binding a list + of values to an expression such as foo.bar in (:value_list) + + The name of the parameter + A collection of values to list + The Hibernate type of the values + + + + Bind multiple values to a named query parameter, guessing the Hibernate + type from the class of the first object in the collection. This is useful for binding a list + of values to an expression such as foo.bar in (:value_list) + + The name of the parameter + A collection of values to list + + + + Bind multiple values to a named query parameter. This is useful for binding + a list of values to an expression such as foo.bar in (:value_list). + + the name of the parameter + a collection of values to list + the Hibernate type of the values + + + + Bind multiple values to a named query parameter. The Hibernate type of the parameter is + first detected via the usage/position in the query and if not sufficient secondly + guessed from the class of the first object in the array. This is useful for binding a list of values + to an expression such as foo.bar in (:value_list). + + the name of the parameter + a collection of values to list + + + + Bind the property values of the given object to named parameters of the query, + matching property names with parameter names and mapping property types to + Hibernate types using heuristics. + + Any PONO + + + + Bind an instance of a to an indexed parameter + using an NHibernate . + + The position of the parameter in the query string, numbered from 0 + A non-null instance of a . + + + + Bind an instance of a to a named parameter + using an NHibernate . + + The name of the parameter + A non-null instance of a . + + + + Bind an instance of a array to an indexed parameter + using an NHibernate . + + The position of the parameter in the query string, numbered from 0 + A non-null instance of a array. + + + + Bind an instance of a array to a named parameter + using an NHibernate . + + The name of the parameter + A non-null instance of a array. + + + + Bind an instance of a to an indexed parameter + using an NHibernate . + + The position of the parameter in the query string, numbered from 0 + A non-null instance of a . + + + + Bind an instance of a to a named parameter + using an NHibernate . + + The name of the parameter + A non-null instance of a . + + + + Bind an instance of a to an indexed parameter + using an NHibernate . + + The position of the parameter in the query string, numbered from 0 + A non-null instance of a . + + + + Bind an instance of a to a named parameter + using an NHibernate . + + The name of the parameter + A non-null instance of a . + + + + Bind an instance of a to an indexed parameter + using an NHibernate . + + The position of the parameter in the query string, numbered from 0 + A non-null instance of a . + + + + Bind an instance of a to a named parameter + using an NHibernate . + + The name of the parameter + A non-null instance of a . + + + + Bind an instance of a to an indexed parameter + using an NHibernate . + + The position of the parameter in the query string, numbered from 0 + A non-null instance of a . + + + + Bind an instance of a to a named parameter + using an NHibernate . + + A non-null instance of a . + The name of the parameter + + + + Bind an instance of a to an indexed parameter + using an NHibernate . + + The position of the parameter in the query string, numbered from 0 + A non-null instance of a . + + + + Bind an instance of a to a named parameter + using an NHibernate . + + The name of the parameter + A non-null instance of a . + + + + Bind an instance of a to an indexed parameter + using an NHibernate . + + The position of the parameter in the query string, numbered from 0 + A non-null instance of a . + + + + Bind an instance of a to a named parameter + using an NHibernate . + + The name of the parameter + A non-null instance of a . + + + + Bind an instance of a mapped persistent class to an indexed parameter. + + Position of the parameter in the query string, numbered from 0 + A non-null instance of a persistent class + + + + Bind an instance of a mapped persistent class to a named parameter. + + The name of the parameter + A non-null instance of a persistent class + + + + Bind an instance of a persistent enumeration class to an indexed parameter + using an NHibernate . + + The position of the parameter in the query string, numbered from 0 + A non-null instance of a persistent enumeration + + + + Bind an instance of a persistent enumeration class to a named parameter + using an NHibernate . + + The name of the parameter + A non-null instance of a persistent enumeration + + + + Bind an instance of a to an indexed parameter + using an NHibernate . + + The position of the parameter in the query string, numbered from 0 + A non-null instance of a . + + + + Bind an instance of a to a named parameter + using an NHibernate . + + The name of the parameter + A non-null instance of a . + + + + Bind an instance of a to an indexed parameter + using an NHibernate . + + The position of the parameter in the query string, numbered from 0 + A non-null instance of a . + + + + Bind an instance of a to a named parameter + using an NHibernate . + + The name of the parameter + A non-null instance of a . + + + + Bind an instance of a to an indexed parameter + using an NHibernate . + + The position of the parameter in the query string, numbered from 0 + A non-null instance of a . + + + + Bind an instance of a to a named parameter + using an NHibernate . + + The name of the parameter + A non-null instance of a . + + + + Bind an instance of a to an indexed parameter + using an NHibernate . + + The position of the parameter in the query string, numbered from 0 + A non-null instance of a . + + + + Bind an instance of a to a named parameter + using an NHibernate . + + The name of the parameter + A non-null instance of a . + + + + Bind an instance of a to an indexed parameter + using an NHibernate . + + The position of the parameter in the query string, numbered from 0 + A non-null instance of a . + + + + Bind an instance of a to a named parameter + using an NHibernate . + + The name of the parameter + A non-null instance of a . + + + + Bind an instance of a to an indexed parameter + using an NHibernate . + + The position of the parameter in the query string, numbered from 0 + A non-null instance of a . + + + + Bind an instance of a to a named parameter + using an NHibernate . + + The name of the parameter + A non-null instance of a . + + + + Bind an instance of a to an indexed parameter + using an NHibernate . + + The position of the parameter in the query string, numbered from 0 + A non-null instance of a . + + + + Bind an instance of a to a named parameter + using an NHibernate . + + The name of the parameter + A non-null instance of a . + + + + Bind an instance of a to a named parameter + using an NHibernate . + + The position of the parameter in the query string, numbered from 0 + An instance of a . + + + + Bind an instance of a to a named parameter + using an NHibernate . + + The name of the parameter + An instance of a . + + + + Override the current session flush mode, just for this query. + + + + + Set a strategy for handling the query results. This can be used to change + "shape" of the query result. + + + + Override the current session cache mode, just for this query. + The cache mode to use. + this (for method chaining) + + + + Execute the update or delete statement. + + The number of entities updated or deleted. + + + + The query string + + + + + The Hibernate types of the query result set. + + + + + The names of all named parameters of the query + + The parameter names, in no particular order + + + + Perform parameter validation. Used prior to executing the encapsulated query. + + + if true, the first ? will not be verified since + its needed for e.g. callable statements returning a out parameter + + + + + Guesses the from the param's value. + + The object to guess the of. + An for the object. + + Thrown when the param is null because the + can't be guess from a null value. + + + + + Guesses the from the . + + The to guess the of. + An for the . + + Thrown when the clazz is null because the + can't be guess from a null type. + + + + + Warning: adds new parameters to the argument by side-effect, as well as mutating the query string! + + + + + Warning: adds new parameters to the argument by side-effect, as well as mutating the query string! + + + + Override the current session cache mode, just for this query. + + The cache mode to use. + this (for method chaining) + + + Functionality common to stateless and stateful sessions + + + + Implementation of the interface for collection filters. + + + + + Default implementation of the , + for "ordinary" HQL queries (not collection filters) + + + + + + Implementation of the interface + + + + + Criteria is a simplified API for retrieving entities by composing + objects. + + + + Using criteria is a very convenient approach for functionality like "search" screens + where there is a variable number of conditions to be placed upon the result set. + + + The Session is a factory for ICriteria. Expression instances are usually obtained via + the factory methods on . eg: + + + IList cats = session.CreateCriteria(typeof(Cat)) + .Add( Expression.Like("name", "Iz%") ) + .Add( Expression.Gt( "weight", minWeight ) ) + .AddOrder( Order.Asc("age") ) + .List(); + + You may navigate associations using or . + + IList cats = session.CreateCriteria(typeof(Cat)) + .CreateCriteria("kittens") + .Add( Expression.like("name", "Iz%") ) + .List(); + + + Hibernate's query language is much more general and should be used for non-simple cases. + + + This is an experimental API. + + + + + + Set a limit upon the number of objects to be retrieved + + + + + + Set the first result to be retrieved + + + + + + Set a timeout for the underlying ADO.NET query + + + + + + + Add an Expression to constrain the results to be retrieved. + + + + + + + An an Order to the result set + + + + + + Get the results + + + + + + Get the results and fill the + + The list to fill with the results. + + + + Strongly-typed version of . + + + + + Strongly-typed version of . + + + + + Convenience method to return a single instance that matches + the query, or null if the query returns no results. + + the single result or + + If there is more than one matching result + + + + + Specify an association fetching strategy. Currently, only + one-to-many and one-to-one associations are supported. + + A dot seperated property path. + The Fetch mode. + + + + + Join an association, assigning an alias to the joined entity + + + + + + + + Join an association using the specified join-type, assigning an alias to the joined + association + + + + The type of join to use. + this (for method chaining) + + + + Create a new , "rooted" at the associated entity + + + + + + + Create a new , "rooted" at the associated entity, + assigning the given alias + + + + + + + + Create a new , "rooted" at the associated entity, + assigning the given alias and using the specified join type. + + A dot-separated property path + The alias to assign to the joined association (for later reference). + The type of join to use. + The created "sub criteria" + + + + Create a new , "rooted" at the associated entity, + using the specified join type. + + A dot-seperated property path + The type of join to use + The created "sub criteria" + + + + Set a strategy for handling the query results. This determines the + "shape" of the query result set. + + + + + + + + + + Set the lock mode of the current entity + + the lock mode + + + + + Set the lock mode of the aliased entity + + an alias + the lock mode + + + + + Enable caching of this query result set + + + + + + + Set the name of the cache region. + + the name of a query cache region, or + for the default query cache + + + + + Used to specify that the query results will be a projection (scalar in + nature). Implicitly specifies the projection result transformer. + + The projection representing the overall "shape" of the + query results. + This instance (for method chaining) + + + The individual components contained within the given + determines the overall "shape" of the query result. + + + + + + Allows to get a sub criteria by path. + Will return null if the criteria does not exists. + + The path. + + + + Alows to get a sub criteria by alias. + Will return null if the criteria does not exists + + The alias. + + + + Override the cache mode for this particular query. + The cache mode to use. + this (for method chaining) + + + + Get the alias of the entity encapsulated by this criteria instance. + + The alias for the encapsulated entity. + + + Override the cache mode for this particular query. + The cache mode to use. + this (for method chaining) + + + Override the cache mode for this particular query. + The cache mode to use. + this (for method chaining) + + + + Named query in "detached mode" where the NHibernate session is not available. + + + + + + + + + Create a new instance of for a named query string defined in the mapping file. + + The name of a query defined externally. + + The query can be either in HQL or SQL format. + + + + + Get an executable instance of , to actually run the query. + + + + + Creates a new DetachedNamedQuery that is a deep copy of the current instance. + + The clone. + + + + Get the query name. + + + + + Query in "detached mode" where the NHibernate session is not available. + + + + + + + + Create a new instance of for the given query string. + + A hibernate query string + + + + Get an executable instance of , to actually run the query. + + + + + Creates a new DetachedQuery that is a deep copy of the current instance. + + The clone. + + + + Get the HQL string. + + + + + Provides an wrapper over the results of an . + + + This is the IteratorImpl in H2.0.3 + + + + + Create an wrapper over an . + + The to enumerate over. + The used to create the . + The to use to load objects. + The s contained in the . + The names of the columns in the . + The that should be applied to the . + Instantiator of the result holder (used for "select new SomeClass(...)" queries). + + The should already be positioned on the first record in . + + + + + Returns an enumerator that can iterate through the query results. + + + An that can be used to iterate through the query results. + + + + + Advances the enumerator to the next element of the query results. + + + if the enumerator was successfully advanced to the next query results + ; if the enumerator has passed the end of the query results. + + + + + + + + A flag to indicate if Disose() has been called. + + + + + Finalizer that ensures the object is correctly disposed of. + + + + + Takes care of freeing the managed and unmanaged resources that + this class is responsible for. + + + + + Takes care of freeing the managed and unmanaged resources that + this class is responsible for. + + Indicates if this EnumerableImpl is being Disposed of or Finalized. + + The command is closed and the reader is disposed. This allows other ADO.NET + related actions to occur without needing to move all the way through the + EnumerableImpl. + + + + + Gets the current element in the query results. + + + The current element in the query results which is either an object or + an object array. + + + If the only returns one type of Entity then an object will + be returned. If this is a multi-column resultset then an object array will be + returned. + + + + + + + + + Type definition of Filter. Filter defines the user's view into enabled dynamic filters, + allowing them to set filter parameter values. + + + + + Set the named parameter's value list for this filter. + + The parameter's name. + The values to be applied. + This FilterImpl instance (for method chaining). + + + + Set the named parameter's value list for this filter. Used + in conjunction with IN-style filter criteria. + + The parameter's name. + The values to be expanded into an SQL IN list. + This FilterImpl instance (for method chaining). + + + + Set the named parameter's value list for this filter. Used + in conjunction with IN-style filter criteria. + + The parameter's name. + The values to be expanded into an SQL IN list. + This FilterImpl instance (for method chaining). + + + + Perform validation of the filter state. This is used to verify the + state of the filter after its enablement and before its use. + + + + + + Get the name of this filter. + + This filter's name. + + + + Get the filter definition containing additional information about the + filter (such as default-condition and expected parameter names/types). + + The filter definition + + + + Set the named parameter's value for this filter. + + The parameter's name. + The value to be applied. + This FilterImpl instance (for method chaining). + + + + Set the named parameter's value list for this filter. Used + in conjunction with IN-style filter criteria. + + The parameter's name. + The values to be expanded into an SQL IN list. + This FilterImpl instance (for method chaining). + + + + Set the named parameter's value list for this filter. Used + in conjunction with IN-style filter criteria. + + The parameter's name. + The values to be expanded into an SQL IN list. + This FilterImpl instance (for method chaining). + + + + Perform validation of the filter state. This is used to verify the + state of the filter after its enablement and before its use. + + + + + Get the name of this filter. + + + + + Helper methods for rendering log messages and exception messages + + + + + Generate small message that can be used in traces and exception messages. + + The to create the string from. + The identifier of the object. + A descriptive in the format of [classname#id] + + + + Generate small message that can be used in traces and exception messages. + + The for the class in question. + The identifier of the object. + The . + A descriptive in the format of [classname#id] + + + + Generate small message that can be used in traces and exception messages. + + The for the class in question. + The identifier of the object. + The . + The NHibernate type of the identifier. + A descriptive in the format of [classname#id] + + + + Generate small message that can be used in traces and exception messages. + + The for the class in question + The id + A descriptive in the form [FooBar#id] + + + + Generate small message that can be used in traces and exception messages. + + The for the class in question + A descriptive in the form [FooBar] + + + + Generate small message that can be used in traces and exception messages. + + The for the class in question + The id + A descriptive in the form [collectionrole#id] + + + + Generate an info message string relating to a given property value + for an entity. + + The entity name + The name of the property + The property value. + An info string, in the form [Foo.bars#1] + + + + Generate an info message string relating to a particular managed + collection. + + The persister for the collection + The id value of the owner + The session factory + An info string, in the form [Foo.bars#1] + + + + Generate an info message string relating to a particular entity, + based on the given entityName and id. + + The defined entity name. + The entity id value. + An info string, in the form [FooBar#1]. + + + + Combines several queries into a single DB call + + + + + Get all the + + + + + Adds the specified criteria to the query + + The criteria. + + + + + Adds the specified detached criteria. + + The detached criteria. + + + + + Sets whatevert this criteria is cacheable. + + if set to true [cachable]. + + + + Set the cache region for thie criteria + + The region + + + + + Force a cache refresh + + + + + + + Initializes a new instance of the class. + + The session. + The factory. + + + Return a cacheable "disassembled" representation of the object. + the value to cache + the session + optional parent entity object (needed for collections) + the disassembled, deep cloned state + + + Reconstruct the object from its cached "disassembled" state. + the disassembled state from the cache + the session + the parent entity object + the the object + + + + Called before assembling a query result set from the query cache, to allow batch fetching + of entities missing from the second-level cache. + + + + + Combines sevaral queries into a single database call + + + + + Get all the + + + + + Add the specified HQL query to the multi query + + + + + Add the specified HQL query to the multi query + + + + + Add a named query to the multi query + + + + + Enable caching of this query result set. + + Should the query results be cacheable? + + + Set the name of the cache region. + The name of a query cache region, or + for the default query cache + + + Should the query force a refresh of the specified query cache region? + This is particularly useful in cases where underlying data may have been + updated via a seperate process (i.e., not modified through Hibernate) and + allows the application to selectively refresh the query cache regions + based on its knowledge of those events. + Should the query result in a forceable refresh of + the query cache? + + + + The timeout for the underlying ADO query + + + + + + Bind a value to a named query parameter + + The name of the parameter + The possibly null parameter value + The NHibernate . + + + + Bind a value to a named query parameter, guessing the NHibernate + from the class of the given object. + + The name of the parameter + The non-null parameter value + + + + Bind multiple values to a named query parameter. This is useful for binding a list + of values to an expression such as foo.bar in (:value_list) + + The name of the parameter + A collection of values to list + The Hibernate type of the values + + + + Bind multiple values to a named query parameter, guessing the Hibernate + type from the class of the first object in the collection. This is useful for binding a list + of values to an expression such as foo.bar in (:value_list) + + The name of the parameter + A collection of values to list + + + + Bind an instance of a to a named parameter + using an NHibernate . + + The name of the parameter + A non-null instance of a . + + + + Bind an instance of a array to a named parameter + using an NHibernate . + + The name of the parameter + A non-null instance of a array. + + + + Bind an instance of a to a named parameter + using an NHibernate . + + The name of the parameter + A non-null instance of a . + + + + Bind an instance of a to a named parameter + using an NHibernate . + + The name of the parameter + A non-null instance of a . + + + + Bind an instance of a to a named parameter + using an NHibernate . + + The name of the parameter + A non-null instance of a . + + + + Bind an instance of a to a named parameter + using an NHibernate . + + A non-null instance of a . + The name of the parameter + + + + Bind an instance of a to a named parameter + using an NHibernate . + + The name of the parameter + A non-null instance of a . + + + + Bind an instance of a to a named parameter + using an NHibernate . + + The name of the parameter + A non-null instance of a . + + + + Bind an instance of a mapped persistent class to a named parameter. + + The name of the parameter + A non-null instance of a persistent class + + + + Bind an instance of a persistent enumeration class to a named parameter + using an NHibernate . + + The name of the parameter + A non-null instance of a persistent enumeration + + + + Bind an instance of a to a named parameter + using an NHibernate . + + The name of the parameter + A non-null instance of a . + + + + Bind an instance of a to a named parameter + using an NHibernate . + + The name of the parameter + A non-null instance of a . + + + + Bind an instance of a to a named parameter + using an NHibernate . + + The name of the parameter + A non-null instance of a . + + + + Bind an instance of a to a named parameter + using an NHibernate . + + The name of the parameter + A non-null instance of a . + + + + Bind an instance of a to a named parameter + using an NHibernate . + + The name of the parameter + A non-null instance of a . + + + + Bind an instance of a to a named parameter + using an NHibernate . + + The name of the parameter + A non-null instance of a . + + + + Bind an instance of a to a named parameter + using an NHibernate . + + The name of the parameter + A non-null instance of a . + + + + Override the current session flush mode, just for this query. + + + + + Set a strategy for handling the query results. This can be used to change + "shape" of the query result. + + + + + Return the query results of all the queries + + + + + + + an actual entity object, not a proxy! + + + + + + Concrete implementation of a SessionFactory. + + + Has the following responsibilities: + + + Caches configuration settings (immutably) + + Caches "compiled" mappings - ie. + and + + + Caches "compiled" queries (memory sensitive cache) + + + Manages PreparedStatements/IDbCommands - how true in NH? + + + Delegates IDbConnection management to the + + + Factory for instances of + + + + This class must appear immutable to clients, even if it does all kinds of caching + and pooling under the covers. It is crucial that the class is not only thread safe + , but also highly concurrent. Synchronization must be used extremely sparingly. + + + + + + + + + + + + + + + + + + + Gets the hql query identified by the name. + + The name of that identifies the query. + + A hql query or if the named + query does not exist. + + + + + + + + + + + Get the return aliases of a query + + + + Return the names of all persistent (mapped) classes that extend or implement the + given class or interface, accounting for implicit/explicit polymorphism settings + and excluding mapped subclasses/joined-subclasses of other classes in the result. + + + + + + + + + + + Closes the session factory, releasing all held resources. + + cleans up used cache regions and "stops" the cache provider. + close the ADO.NET connection + + + + + + + + Get a new stateless session. + + + Get a new stateless session for the given ADO.NET connection. + + + + + + + + + + + + + + + + + + + + + + + + + + + Statistics SPI + + + + + + Get the statistics for this session factory + + + + Gets the ICurrentSessionContext instance attached to this session factory. + + + + + Delegate to handle the scenario of an entity not found by a specified id. + + + + + Delegate method to handle the scenario of an entity not found. + + The entityName (may be the class fullname) + The requested id not founded. + + + + A class that can be used as a Key in a Hashtable for + a Query Cache. + + + + + A class that can be used as a Key in a Hashtable for + a Query Cache. + + + + + Resolves lookups and deserialization. + + + + This is used heavily be Deserialization. Currently a SessionFactory is not really serialized. + All that is serialized is it's name and uid. During Deserializaiton the serialized SessionFactory + is converted to the one contained in this object. So if you are serializing across AppDomains + you should make sure that "name" is specified for the SessionFactory in the hbm.xml file and that the + other AppDomain has a configured SessionFactory with the same name. If + you are serializing in the same AppDomain then there will be no problem because the uid will + be in this object. + + + TODO: verify that the AppDomain statements are correct. + + + + + + + + + Adds an Instance of the SessionFactory to the local "cache". + + The identifier of the ISessionFactory. + The name of the ISessionFactory. + The ISessionFactory. + The configured properties for the ISessionFactory. + + + + Removes the Instance of the SessionFactory from the local "cache". + + The identifier of the ISessionFactory. + The name of the ISessionFactory. + The configured properties for the ISessionFactory. + + + + Returns a Named Instance of the SessionFactory from the local "cache" identified by name. + + The name of the ISessionFactory. + An instantiated ISessionFactory. + + + + Returns an Instance of the SessionFactory from the local "cache" identified by UUID. + + The identifier of the ISessionFactory. + An instantiated ISessionFactory. + + + + Concrete implementation of a Session, also the central, organizing component + of Hibernate's internal implementation. + + + Exposes two interfaces: ISession itself, to the application and ISessionImplementor + to other components of hibernate. This is where the hard stuff is... + NOT THREADSAFE + + + + + Constructor used to recreate the Session during the deserialization. + + + + + This is needed because we have to do some checking before the serialization process + begins. I don't know how to add logic in ISerializable.GetObjectData and have .net + write all of the serializable fields out. + + + + + Verify the ISession can be serialized and write the fields to the Serializer. + + + + + The fields are marked with [NonSerializable] as just a point of reference. This method + has complete control and what is serialized and those attributes are ignored. However, + this method should be in synch with the attributes for easy readability. + + + + + Once the entire object graph has been deserialized then we can hook the + collections, proxies, and entities back up to the ISession. + + + + + + Constructor used for OpenSession(...) processing, as well as construction + of sessions for GetCurrentSession(). + + The user-supplied connection to use for this session. + The factory from which this session was obtained + NOT USED + The timestamp for this session + The interceptor to be applied to this session + The entity-mode for this session + Should we auto flush before completion of transaction + Should we auto close after completion of transaction + The mode by which we should release JDBC connections. + + + + Constructor used in building "child sessions". + + The parent Session + The entity mode + + + + + + + Ensure that the locks are downgraded to + and that all of the softlocks in the have + been released. + + + + + Save a transient object. An id is generated, assigned to the object and returned + + + + + + + Save a transient object with a manually assigned ID + + + + + + + Delete a persistent object + + + + + Delete a persistent object (by explicit entity name) + + + + Retrieve a list of persistent objects using a Hibernate query + + + + + + + + + + + + + + + Give the interceptor an opportunity to override the default instantiation + + + + + + + Force an immediate flush + + + Cascade merge an entity instance + + + Cascade persist an entity instance + + + Cascade persist an entity instance during the flush process + + + Cascade refesh an entity instance + + + Cascade copy an entity instance + + + Cascade delete an entity instance + + + + detect in-memory changes, determine if the changes are to tables + named in the query and, if so, complete execution the flush + + + + + + + Load the data for the object with the specified id into a newly created object. + This is only called when lazily initializing a proxy. + Do NOT return a proxy. + + + + + Return the object with the specified id or throw exception if no row with that id exists. Defer the load, + return a new proxy or return an existing proxy if possible. Do not check if the object was deleted. + + + + + Load the data for the object with the specified id into a newly created object + using "for update", if supported. A new key will be assigned to the object. + This should return an existing proxy where appropriate. + + If the object does not exist in the database, an exception is thrown. + + + + + + + Thrown when the object with the specified id does not exist in the database. + + + + + Load the data for the object with the specified id into a newly created object + using "for update", if supported. A new key will be assigned to the object. + This should return an existing proxy where appropriate. + + If the object does not exist in the database, null is returned. + + + + + + + + + + + + This can be called from commit() or at the start of a List() method. + + Perform all the necessary SQL statements in a sensible order, to allow + users to repect foreign key constraints: + + Inserts, in the order they were performed + Updates + Deletion of collection elements + Insertion of collection elements + Deletes, in the order they were performed + + + + Go through all the persistent objects and look for collections they might be + holding. If they had a nonpersistable collection, substitute a persistable one + + + + + + Not for internal use + + + + + + + Get the id value for an object that is actually associated with the session. + This is a bit stricter than GetEntityIdentifierIfNotUnsaved(). + + + + + + + + + + + + + + called by a collection that wants to initialize itself + + + + + + + + + + A flag to indicate if Dispose() has been called. + + + + + Finalizer that ensures the object is correctly disposed of. + + + + + Just in case the user forgot to Commit() or Close() + + + + + Takes care of freeing the managed and unmanaged resources that + this class is responsible for. + + Indicates if this Session is being Disposed of or Finalized. + + If this Session is being Finalized (isDisposing==false) then make sure not + to call any methods that could potentially bring this Session back to life. + + + + + remove any hard references to the entity that are held by the infrastructure + (references held by application or other persistant instances are okay) + + + + + + + + + + + + + + + + + + + + + Get the ActionQueue for this session + + + + + + + Gets if the ISession is connected. + + + if the ISession is connected. + + + An ISession is considered connected if there is an (regardless + of its state) or if it the field connect is true. Meaning that it will connect + at the next operation that requires a connection. + + + + Get the statistics for this session. + + + Retrieves the configured event listeners from this event source. + + + + Implements SQL query passthrough + + + An example mapping is: + + <sql-query-name name="mySqlQuery"> + <return alias="person" class="eg.Person" /> + SELECT {person}.NAME AS {person.name}, {person}.AGE AS {person.age}, {person}.SEX AS {person.sex} + FROM PERSON {person} WHERE {person}.NAME LIKE 'Hiber%' + </sql-query-name> + + + + + + Declare a "root" entity, without specifying an alias + + + + + Declare a "root" entity + + + + + Declare a "root" entity, specifying a lock mode + + + + + Declare a "root" entity, without specifying an alias + + + + + Declare a "root" entity + + + + + Declare a "root" entity, specifying a lock mode + + + + + Declare a "joined" entity + + + + + Declare a "joined" entity, specifying a lock mode + + + + + Declare a scalar query result + + + + + Use a predefined named ResultSetMapping + + + + Constructs a SQLQueryImpl given a sql query defined in the mappings. + The representation of the defined sql-query. + The session to which this SQLQueryImpl belongs. + Metadata about parameters found in the query. + + + + A command-oriented API for performing bulk operations against a database. + + + A stateless session does not implement a first-level cache nor + interact with any second-level cache, nor does it implement + transactional write-behind or automatic dirty checking, nor do + operations cascade to associated instances. Collections are + ignored by a stateless session. Operations performed via a + stateless session bypass Hibernate's event model and + interceptors. Stateless sessions are vulnerable to data + aliasing effects, due to the lack of a first-level cache. + + For certain kinds of transactions, a stateless session may + perform slightly faster than a stateful session. + + + + Close the stateless session and release the ADO.NET connection. + + + Insert a entity. + A new transient instance + the identifier of the instance + + + Insert a row. + The entityName for the entity to be inserted + a new transient instance + the identifier of the instance + + + Update a entity. + a detached entity instance + + + Update a entity. + The entityName for the entity to be updated + a detached entity instance + + + Delete a entity. + a detached entity instance + + + Delete a entity. + The entityName for the entity to be deleted + a detached entity instance + + + Retrieve a entity. + a detached entity instance + + + Retrieve a entity. + + + a detached entity instance + + + + + Retrieve a entity, obtaining the specified lock mode. + + a detached entity instance + + + + Retrieve a entity, obtaining the specified lock mode. + + a detached entity instance + + + + Refresh the entity instance state from the database. + + The entity to be refreshed. + + + + Refresh the entity instance state from the database. + + The entityName for the entity to be refreshed. + The entity to be refreshed. + + + + Refresh the entity instance state from the database. + + The entity to be refreshed. + The LockMode to be applied. + + + + Refresh the entity instance state from the database. + + The entityName for the entity to be refreshed. + The entity to be refreshed. + The LockMode to be applied. + + + + Create a new instance of Query for the given HQL query string. + + Entities returned by the query are detached. + + + + Obtain an instance of for a named query string defined in + the mapping file. + + + The query can be either in HQL or SQL format. + Entities returned by the query are detached. + + + + + Create a new instance, for the given entity class, + or a superclass of an entity class. + + A class, which is persistent, or has persistent subclasses + The . + Entities returned by the query are detached. + + + + Create a new instance, for the given entity class, + or a superclass of an entity class, with the given alias. + + A class, which is persistent, or has persistent subclasses + The alias of the entity + The . + Entities returned by the query are detached. + + + + Create a new instance, for the given entity name. + + The entity name. + The . + Entities returned by the query are detached. + + + + Create a new instance, for the given entity name, + with the given alias. + + The entity name. + The alias of the entity + The . + Entities returned by the query are detached. + + + + Create a new instance of for the given SQL query string. + Entities returned by the query are detached. + + a SQL query + The + + + Begin a NHibernate transaction. + + + Get the current Hibernate transaction. + + + + Returns the current ADO.NET connection associated with this instance. + + + If the session is using aggressive connection release (as in a + CMT environment), it is the application's responsibility to + close the connection returned by this call. Otherwise, the + application should not close the connection. + + + + Close the stateless session and release the ADO.NET connection. + + + Insert a entity. + A new transient instance + the identifier of the instance + + + Insert a row. + The entityName for the entity to be inserted + a new transient instance + the identifier of the instance + + + Update a entity. + a detached entity instance + + + Update a entity. + The entityName for the entity to be updated + a detached entity instance + + + Delete a entity. + a detached entity instance + + + Delete a entity. + The entityName for the entity to be deleted + a detached entity instance + + + Retrieve a entity. + a detached entity instance + + + Retrieve a entity. + + + a detached entity instance + + + + + Retrieve a entity, obtaining the specified lock mode. + + a detached entity instance + + + + Retrieve a entity, obtaining the specified lock mode. + + a detached entity instance + + + + Refresh the entity instance state from the database. + + The entity to be refreshed. + + + + Refresh the entity instance state from the database. + + The entityName for the entity to be refreshed. + The entity to be refreshed. + + + + Refresh the entity instance state from the database. + + The entity to be refreshed. + The LockMode to be applied. + + + + Refresh the entity instance state from the database. + + The entityName for the entity to be refreshed. + The entity to be refreshed. + The LockMode to be applied. + + + + Create a new instance, for the given entity class, + or a superclass of an entity class. + + A class, which is persistent, or has persistent subclasses + The . + Entities returned by the query are detached. + + + + Create a new instance, for the given entity class, + or a superclass of an entity class, with the given alias. + + A class, which is persistent, or has persistent subclasses + The alias of the entity + The . + Entities returned by the query are detached. + + + + Create a new instance, for the given entity name. + + The entity name. + The . + Entities returned by the query are detached. + + + + Create a new instance, for the given entity name, + with the given alias. + + The entity name. + The alias of the entity + The . + Entities returned by the query are detached. + + + Begin a NHibernate transaction. + + + + Finalizer that ensures the object is correctly disposed of. + + + + + Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. + + 2 + + + Get the current Hibernate transaction. + + + Contract for field interception handlers. + + + Use to associate the entity to which we are bound to the given session. + The session to which we are now associated. + + + The the given field initialized for the entity to which we are bound? + The name of the field to check + True if the given field is initialized; otherwise false. + + + Forcefully mark the entity as being dirty. + + + Clear the internal dirty flag. + + + Is the entity considered dirty? + True if the entity is dirty; otherwise false. + + + Is the entity to which we are bound completely initialized? + + + Helper class for dealing with enhanced entity classes. + + + Marker value for uninitialized properties + + + Contract for controlling how lazy properties get initialized. + + + Initialize the property, and return its new value + + + + Walker for collections of values and many-to-many associations + + + + + Superclass of walkers for collection initializers + + + + + + + + Add on association (one-to-one, many-to-one, or a collection) to a list + of associations to be fetched by outerjoin (if necessary) + + + + + Add on association (one-to-one, many-to-one, or a collection) to a list + of associations to be fetched by outerjoin + + + + + For an entity class, return a list of associations to be fetched by outerjoin + + + + + For a collection role, return a list of associations to be fetched by outerjoin + + + + + For a collection role, return a list of associations to be fetched by outerjoin + + + + + For an entity class, add to a list of associations to be fetched + by outerjoin + + + + + For a component, add to a list of associations to be fetched by outerjoin + + + + + For a composite element, add to a list of associations to be fetched by outerjoin + + + + + Extend the path by the given property name + + + + + Get the join type (inner, outer, etc) or -1 if the + association should not be joined. Override on + subclasses. + + + + + Use an inner join if it is a non-null association and this + is the "first" join in a series + + + + + Does the mapping, and Hibernate default semantics, specify that + this association should be fetched by outer joining + + + + + Override on subclasses to enable or suppress joining + of certain association types + + + + + Used to detect circularities in the joined graph, note that + this method is side-effecty + + + + + Used to detect circularities in the joined graph, note that + this method is side-effecty + + + + + Should we join this association? + + + + + Generate a sequence of LEFT OUTER JOIN clauses for the given associations. + + + + + Count the number of instances of IJoinable which are actually + also instances of ILoadable, or are one-to-many associations + + + + + Count the number of instances of which + are actually also instances of + which are being fetched by outer join + + + + + Get the order by string required for collection fetching + + + + + Render the where condition for a (batch) load by identifier / collection key + + + + + Generate a select list of columns containing all properties of the entity classes + + + + + Uniquely identifier a foreign key, so that we don't + join it more than once, and create circularities + + + + + We can use an inner join for first many-to-many association + + + + + Superclass for loaders that initialize collections + + + + + + + Implements logic for walking a tree of associated classes. + + + Generates an SQL select string containing all properties of those classes. + Tablse are joined using an ANSI-style left outer join. + + + + + An interface for collection loaders + + + + + Initialize the given collection + + + + + + + "Batch" loads collections, using multiple foreign key values in the SQL Where clause + + + + + Walker for one-to-many associations + + + + + + Loads one-to-many associations + + + The collection persister must implement . + For other collections, create a customized subclass of . + + + + + Implements subselect fetching for a one to many association + + + + + A for queries. + + + + + The superclass deliberately excludes collections + + + + + Don't bother with the discriminator, unless overridden by subclass + + + + + Use the discriminator, to narrow the select to instances + of the queried subclass, also applying any filters. + + + + + A Loader for queries. + + + Note that criteria + queries are more like multi-object Load()s than like HQL queries. + + + + + Get the names of the columns constrained + by this criterion. + + + + + Get the aliases of the columns constrained + by this criterion (for use in ORDER BY clause). + + + + + Get the a typed value for the given property value. + + + + + Optional, may return + + + + Substitues JDBC parameter placeholders (?) for all encountered + parameter specifications. It also tracks the positions of these + parameter specifications within the query string. This accounts for + ordinal-params, named-params, and ejb3-positional-params. + + @param sqlString The query string. + @return The SQL query with parameter substitution complete. + + + + that uses columnnames instead of generated aliases. + Aliases can still be overwritten via <return-property> + + + + + Type definition of CollectionAliases. + + + + + Returns the suffixed result-set column-aliases for columns making + up the key for this collection (i.e., its FK to its owner). + + The key result-set column aliases. + + + + Returns the suffixed result-set column-aliases for the collumns + making up the collection's index (map or list). + + The index result-set column aliases. + + + + Returns the suffixed result-set column-aliases for the columns + making up the collection's elements. + + The element result-set column aliases. + + + + Returns the suffixed result-set column-aliases for the column + defining the collection's identifier (if any). + + The identifier result-set column aliases. + + + + Returns the suffix used to unique the column aliases for this + particular alias set. + + The uniqued column alias suffix. + + + + Returns the suffixed result-set column-aliases for columns making up the key for this collection (i.e., its FK to + its owner). + + The key result-set column aliases. + + + + Returns the suffixed result-set column-aliases for the collumns making up the collection's index (map or list). + + The index result-set column aliases. + + + + Returns the suffixed result-set column-aliases for the columns making up the collection's elements. + + The element result-set column aliases. + + + + Returns the suffixed result-set column-aliases for the column defining the collection's identifier (if any). + + The identifier result-set column aliases. + + + + Returns the suffix used to unique the column aliases for this particular alias set. + + The uniqued column alias suffix. + + + + that chooses the column names over the alias names. + + + + + EntityAliases which handles the logic of selecting user provided aliases (via return-property), + before using the default aliases. + + + + + Metadata describing the SQL result set column aliases + for a particular entity + + + + + The result set column aliases for the property columns of a subclass + + + + + The result set column aliases for the primary key columns + + + + + The result set column aliases for the discriminator columns + + + + + The result set column aliases for the version columns + + + + + The result set column aliases for the property columns + + + + + The result set column alias for the Oracle row id + + + + + Calculate and cache select-clause suffixes. + + + + + Encapsulates the metadata available from the database result set. + + + + + Initializes a new instance of the class. + + The result set. + + + + Gets the column count in the result set. + + The column count. + + + + Gets the name of the column at the specified position. + + The (zero-based) position. + The column name. + + + + Gets the (zero-based) position of the column with the specified name. + + Name of the column. + The column position. + + + + Gets the Hibernate type of the specified column. + + The column position. + The Hibernate type. + + + + Abstract superclass for entity loaders that use outer joins + + + + + + + + Load an entity instance. If OptionalObject is supplied, load the entity + state into the given (uninitialized) object + + + + + "Batch" loads entities, using multiple primary key values in the + SQL where clause. + + + + + A walker for loaders that fetch entities + + + + + Disable outer join fetching if this loader obtains an + upgrade lock mode + + + + + Load an entity using outerjoin fetching to fetch associated entities. + + + The must implement . For other entities, + create a customized subclass of . + + + + + CollectionAliases which handles the logic of selecting user provided aliases (via return-property), + before using the default aliases. + + + + + Returns the suffixed result-set column-aliases for columns making up the key for this collection (i.e., its FK to + its owner). + + + + + Returns the suffixed result-set column-aliases for the collumns making up the collection's index (map or list). + + + + + Returns the suffixed result-set column-aliases for the columns making up the collection's elements. + + + + + Returns the suffixed result-set column-aliases for the column defining the collection's identifier (if any). + + + + + Returns the suffix used to unique the column aliases for this particular alias set. + + + + + Get the position of the join with the given alias in the + list of joins + + + + + Convenience base class for AuxiliaryDatabaseObjects. + + + This implementation performs dialect scoping checks strictly based on + dialect name comparisons. Custom implementations might want to do + instanceof-type checks. + + + + + Auxiliary database objects (i.e., triggers, stored procedures, etc) defined + in the mappings. Allows Hibernate to manage their lifecycle as part of + creating/dropping the schema. + + + + + Operations to create/drop the mapping element in the database. + + + + + When implemented by a class, generates the SQL string to create + the mapping element in the database. + + The to use for SQL rules. + + + + + A string that contains the SQL to create an object. + + + + + When implemented by a class, generates the SQL string to drop + the mapping element from the database. + + The to use for SQL rules. + + + + A string that contains the SQL to drop an object. + + + + + Add the given dialect name to the scope of dialects to which + this database object applies. + + The name of a dialect. + + + + Does this database object apply to the given dialect? + + The dialect to check against. + True if this database object does apply to the given dialect. + + + + Gets called by NHibernate to pass the configured type parameters to the implementation. + + + + + A NHibernate any type. + + + Polymorphic association to one of several tables. + + + + + Any value that maps to columns. + + + + + Represents an identifying key of a table: the value for primary key + of an entity, or a foreign key of a collection or join table or + joined subclass table. + + + + + A value is anything that is persisted by value, instead of + by reference. It is essentially a Hibernate IType, together + with zero or more columns. Values are wrapped by things with + higher level semantics, for example properties, collections, + classes. + + + + + + + + + + Determines if the Value is part of a valid mapping. + + The to validate. + + if the Value is part of a valid mapping, + otherwise. + + + + Mainly used to make sure that Value maps to the correct number + of columns. + + + + + Gets the number of columns that this value spans in the table. + + + + + Gets an of objects + that this value is stored in. + + + + + Gets the to read/write the Values. + + + + + Gets the this Value is stored in. + + + + + Gets a indicating if this Value is unique. + + + + + Gets a indicating if this Value can have + null values. + + + + + Gets a indicating if this is a SimpleValue + that does not involve foreign keys. + + + + + Get or set the identifier type name + + + + + Get or set the metatype + + + + + Represent the relation between a meta-value and the related entityName + + + + + An array has a primary key consisting of the key columns + index column + + + + + A list has a primary key consisting of the key columns + index column + + + + + Indexed collections include IList, IDictionary, Arrays + and primitive Arrays. + + + + + Base class that stores the mapping information for <array>, <bag>, + <id-bag>, <list>, <map>, and <set> + collections. + + + Subclasses are responsible for the specialization required for the particular + collection style. + + + + + Any mapping with an outer-join attribute + + + + + Defines mapping elements to which filters may be applied. + + + + + Gets or sets a indicating if this is a + mapping for a generic collection. + + + if a collection from the System.Collections.Generic namespace + should be used, if a collection from the System.Collections + namespace should be used. + + + This has no affect on any versions of the .net framework before .net-2.0. + + + + + Gets or sets an array of that contains the arguments + needed to construct an instance of a closed type. + + + + + Initializes a new instance of the class. + + The that contains this list mapping. + + + + Gets the appropriate that is + specialized for this list mapping. + + + + + Mapping for a property of a .NET class (entity + or component). + + + + Common interface for things that can handle meta attributes. + + + + Retrive the + + The attribute name + The if exists; null otherwise + + + + Meta-Attribute collection. + + + + + Gets the number of columns this property uses in the db. + + + + + Gets an of s. + + + + + Gets or Sets the name of the Property in the class. + + + + + + + + A bag permits duplicates, so it has no primary key + + + + + A bag permits duplicates, so it has no primary key. + + The that contains this bag mapping. + + + + Gets the appropriate that is + specialized for this bag mapping. + + + + + Represents the mapping to a column in a database. + + + + + Initializes a new instance of . + + + + + Initializes a new instance of . + + The name of the column. + + + + Gets the name of this Column in quoted form if it is necessary. + + + The that knows how to quote + the column name. + + + The column name in a form that is safe to use inside of a SQL statement. + Quoted if it needs to be, not quoted if it does not need to be. + + + + For any column name, generate an alias that is unique + to that column name, and also 10 characters or less + in length. + + + + Gets the name of the data type for the column. + + The to use to get the valid data types. + + + The name of the data type for the column. + + + If the mapping file contains a value of the attribute sql-type this will + return the string contained in that attribute. Otherwise it will use the + typename from the of the object. + + + + + Determines if this instance of and a specified object, + which must be a Column can be considered the same. + + An that should be a . + + if the name of this Column and the other Column are the same, + otherwise . + + + + + Determines if this instance of and the specified Column + can be considered the same. + + A to compare to this Column. + + if the name of this Column and the other Column are the same, + otherwise . + + + + + Returns the hash code for this instance. + + + + returns quoted name as it would be in the mapping file. + + + Shallow copy, the value is not copied + + + + Gets or sets the length of the datatype in the database. + + The length of the datatype in the database. + + + + Gets or sets the name of the column in the database. + + + The name of the column in the database. The get does + not return a Quoted column name. + + +

+ If a value is passed in that is wrapped by ` then + NHibernate will Quote the column whenever SQL is generated + for it. How the column is quoted depends on the Dialect. +

+

+ The value returned by the getter is not Quoted. To get the + column name in quoted form use . +

+
+
+ + + Gets or sets if the column can have null values in it. + + if the column can have a null value in it. + + + + Gets or sets the index of the column in the . + + + The index of the column in the . + + + + + Gets or sets if the column contains unique values. + + if the column contains unique values. + + + + Gets or sets the sql data type name of the column. + + + The sql data type name of the column. + + + This is usually read from the sql-type attribute. + + + + + Gets or sets if the column needs to be quoted in SQL statements. + + if the column is quoted. + + + + Gets or sets whether the column is unique. + + + + + Gets or sets a check constraint on the column + + + + + Do we have a check constraint? + + + + + The underlying columns SqlType. + + + If null, it is because the sqltype code is unknown. + + Use to retreive the sqltypecode used + for the columns associated Value/Type. + + + + + The mapping for a component, composite element, composite identifier, + etc. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Base class for relational constraints in the database. + + + + + Adds the to the of + Columns that are part of the constraint. + + The to include in the Constraint. + + + + Generates the SQL string to drop this Constraint in the database. + + The to use for SQL rules. + + + + A string that contains the SQL to drop this Constraint. + + + + + Generates the SQL string to create this Constraint in the database. + + The to use for SQL rules. + + + + + A string that contains the SQL to create this Constraint. + + + + + When implemented by a class, generates the SQL string to create the named + Constraint in the database. + + The to use for SQL rules. + The name to use as the identifier of the constraint in the database. + + + + A string that contains the SQL to create the named Constraint. + + + + + Gets or sets the Name used to identify the constraint in the database. + + The Name used to identify the constraint in the database. + + + + Gets an of objects that are part of the constraint. + + + An of objects that are part of the constraint. + + + + + Gets the number of columns that this Constraint contains. + + + The number of columns that this Constraint contains. + + + + + Gets or sets the this Constraint is in. + + + The this Constraint is in. + + + + + Represents a Table in a database that an object gets mapped against. + + + + + Initializes a new instance of . + + + + + Gets the schema qualified name of the Table. + + The that knows how to Quote the Table name. + The name of the table qualified with the schema if one is specified. + + + + Gets the schema qualified name of the Table using the specified qualifier + + The that knows how to Quote the Table name. + The Qualifier to use when accessing the table. + A String representing the Qualified name. + If this were used with MSSQL it would return a dbo.table_name. + + + returns quoted name as it would be in the mapping file. + + + + Gets the name of this Table in quoted form if it is necessary. + + + The that knows how to quote the Table name. + + + The Table name in a form that is safe to use inside of a SQL statement. + Quoted if it needs to be, not quoted if it does not need to be. + + + + returns quoted name as it is in the mapping file. + + + + Gets the schema for this table in quoted form if it is necessary. + + + The that knows how to quote the table name. + + + The schema name for this table in a form that is safe to use inside + of a SQL statement. Quoted if it needs to be, not quoted if it does not need to be. + + + + + Gets the at the specified index. + + The index of the Column to get. + + The at the specified index. + + + + + Adds the to the of + Columns that are part of the Table. + + The to include in the Table. + + + + Generates the SQL string to create this Table in the database. + + The to use for SQL rules. + + + + + A string that contains the SQL to create this Table, Primary Key Constraints + , and Unique Key Constraints. + + + + + Generates the SQL string to drop this Table in the database. + + The to use for SQL rules. + + + + A string that contains the SQL to drop this Table and to cascade the drop to + the constraints if the database supports it. + + + + + Gets the identified by the name. + + The name of the to get. + + The identified by the name. If the + identified by the name does not exist then it is created. + + + + + Gets the identified by the name. + + The name of the to get. + + The identified by the name. If the + identified by the name does not exist then it is created. + + + + + Create a for the columns in the Table. + + + An of objects. + + + + A for the columns in the Table. + + + This does not necessarily create a , if + one already exists for the columns then it will return an + existing . + + + + + Generates a unique string for an of + objects. + + An of objects. + + An unique string for the objects. + + + + + Sets the Identifier of the Table. + + The that represents the Identifier. + + + + + + + + + Return the column which is identified by column provided as argument. + column with atleast a name. + + The underlying column or null if not inside this table. + Note: the instance *can* be different than the input parameter, but the name will be the same. + + + + + Gets or sets the name of the Table in the database. + + + The name of the Table in the database. The get does + not return a Quoted Table name. + + +

+ If a value is passed in that is wrapped by ` then + NHibernate will Quote the Table whenever SQL is generated + for it. How the Table is quoted depends on the Dialect. +

+

+ The value returned by the getter is not Quoted. To get the + column name in quoted form use . +

+
+
+ + + Gets the number of columns that this Table contains. + + + The number of columns that this Table contains. + + + + + Gets an of objects that + are part of the Table. + + + An of objects that are + part of the Table. + + + + + Gets an of objects that + are part of the Table. + + + An of objects that are + part of the Table. + + + + + Gets an of objects that + are part of the Table. + + + An of objects that are + part of the Table. + + + + + Gets an of objects that + are part of the Table. + + + An of objects that are + part of the Table. + + + + + Gets or sets the of the Table. + + The of the Table. + + + + Gets or sets the schema the table is in. + + + The schema the table is in or if no schema is specified. + + + + + Gets the unique number of the Table. + + The unique number of the Table. + + + + Gets or sets if the column needs to be quoted in SQL statements. + + if the column is quoted. + + + + A value which is "typed" by reference to some other value + (for example, a foreign key is typed by the referenced primary key). + + + + + A Foreign Key constraint in the database. + + + + + Generates the SQL string to create the named Foreign Key Constraint in the database. + + The to use for SQL rules. + The name to use as the identifier of the constraint in the database. + + + + A string that contains the SQL to create the named Foreign Key Constraint. + + + + + Get the SQL string to drop this Constraint in the database. + + The to use for SQL rules. + + + + A string that contains the SQL to drop this Constraint. + + + + + Validates that columnspan of the foreignkey and the primarykey is the same. + Furthermore it aligns the length of the underlying tables columns. + + + + + Gets or sets the that the Foreign Key is referencing. + + The the Foreign Key is referencing. + + Thrown when the number of columns in this Foreign Key is not the same + amount of columns as the Primary Key in the ReferencedTable. + + + + Does this foreignkey reference the primary key of the reference table + + + + A formula is a derived column value. + + + + + + + + + + + + + + + + + + + An PersistentIdentifierBag has a primary key consistenting of just + the identifier column. + + + + + A collection with a synthetic "identifier" column. + + + + + + + + + + + + + + + + + + + + + + + + + + An Index in the database. + + + + + Generates the SQL string to create this Index in the database. + + The to use for SQL rules. + + + + + A string that contains the SQL to create this Index. + + + + + Generates the SQL string to drop this Index in the database. + + The to use for SQL rules. + + + + A string that contains the SQL to drop this Index. + + + + + Adds the to the of + Columns that are part of the Index. + + The to include in the Index. + + + + Gets or sets the this Index is in. + + + The this Index is in. + + + + + Gets an of objects that are + part of the Index. + + + An of objects that are + part of the Index. + + + + + Gets or sets the Name used to identify the Index in the database. + + The Name used to identify the Index in the database. + + + + Declaration of a System.Type mapped with the <subclass> or + <joined-subclass> element. + + + + + Base class for the mapped by <class> and a + that is mapped by <subclass> or + <joined-subclass>. + + + + + + + + + + + Adds a to the class hierarchy. + + The to add to the hierarchy. + + + + Change the property definition or add a new property definition + + The to add. + + + + Adds a that is implemented by a subclass. + + The implemented by a subclass. + + + + Adds a that a subclass is stored in. + + The the subclass is stored in. + + + + Creates the for the + this type is persisted in. + + The that is used to Alias columns. + + + + Given a property path, locate the appropriate referenceable property reference. + + + A referenceable property is a property which can be a target of a foreign-key + mapping (an identifier or explicitly named in a property-ref). + + The property path to resolve into a property reference. + The property reference (never null). + If the property could not be found. + + + + + + + + + + Gets the that is being mapped. + + The that is being mapped. + + The value of this is set by the name attribute on the <class> + element. + + + + + Gets or sets the to use as a Proxy. + + The to use as a Proxy. + + The value of this is set by the proxy attribute. + + + + + Gets or Sets if the Insert Sql is built dynamically. + + if the Sql is built at runtime. + + The value of this is set by the dynamic-insert attribute. + + + + + Gets or Sets if the Update Sql is built dynamically. + + if the Sql is built at runtime. + + The value of this is set by the dynamic-update attribute. + + + + + Gets or Sets the value to use as the discriminator for the Class. + + + A value that distinguishes this subclass in the database. + + + The value of this is set by the discriminator-value attribute. Each <subclass> + in a heirarchy must define a unique discriminator-value. The default value + is the class name if no value is supplied. + + + + + Gets the number of subclasses that inherit either directly or indirectly. + + The number of subclasses that inherit from this PersistentClass. + + + + Iterate over subclasses in a special 'order', most derived subclasses first. + + + It will recursively go through Subclasses so that if a SubclassType has Subclasses + it will pick those up also. + + + + + Gets an of objects + that directly inherit from this PersistentClass. + + + An of objects + that directly inherit from this PersistentClass. + + + + + When implemented by a class, gets a boolean indicating if this + mapped class is inherited from another. + + + if this class is a subclass or joined-subclass + that inherited from another class. + + + + + When implemented by a class, gets a boolean indicating if the mapped class + has a version property. + + if there is a <version> property. + + + + When implemented by a class, gets an + of objects that this mapped class contains. + + + An of objects that + this mapped class contains. + + + This is all of the properties of this mapped class and each mapped class that + it is inheriting from. + + + + + When implemented by a class, gets an + of objects that this mapped class reads from + and writes to. + + + An of objects that + this mapped class reads from and writes to. + + + This is all of the tables of this mapped class and each mapped class that + it is inheriting from. + + + + + Gets an of objects that + this mapped class contains and that all of its subclasses contain. + + + An of objects that + this mapped class contains and that all of its subclasses contain. + + + + + Gets an of all of the objects that the + subclass finds its information in. + + An of objects. + It adds the TableClosureIterator and the subclassTables into the IEnumerable. + + + + When implemented by a class, gets or sets the of the Persister. + + + + + When implemented by a class, gets the of the class + that is mapped in the class element. + + + The of the class that is mapped in the class element. + + + + + + + + + + + + + + + Build a collection of properties which are "referenceable". + + + See for a discussion of "referenceable". + + + + + + + + + + + + + + + Build an iterator over the properties defined on this class. The returned + iterator only accounts for "normal" properties (i.e. non-identifier + properties). + + + An of objects. + + + Differs from in that the iterator + we return here will include properties defined as part of a join. + + + + + Build an enumerable over the properties defined on this class which + are not defined as part of a join. + As with the returned iterator only accounts + for non-identifier properties. + + An enumerable over the non-joined "normal" properties. + + + + + + + + + Gets a boolean indicating if this PersistentClass has any subclasses. + + if this PeristentClass has any subclasses. + + + + Gets or Sets the that this class is stored in. + + The this class is stored in. + + The value of this is set by the table attribute. + + + + + When implemented by a class, gets or set a boolean indicating + if the mapped class has properties that can be changed. + + if the object is mutable. + + The value of this is set by the mutable attribute. + + + + + When implemented by a class, gets a boolean indicating + if the mapped class has a Property for the id. + + if there is a Property for the id. + + + + When implemented by a class, gets or sets the + that is used as the id. + + + The that is used as the id. + + + + + When implemented by a class, gets or sets the + that contains information about the identifier. + + The that contains information about the identifier. + + + + When implemented by a class, gets or sets the + that is used as the version. + + The that is used as the version. + + + + When implemented by a class, gets or sets the + that contains information about the discriminator. + + The that contains information about the discriminator. + + + + When implemented by a class, gets or sets if the mapped class has subclasses or is + a subclass. + + + if the mapped class has subclasses or is a subclass. + + + + + When implemented by a class, gets or sets the CacheConcurrencyStrategy + to use to read/write instances of the persistent class to the Cache. + + The CacheConcurrencyStrategy used with the Cache. + + + + When implemented by a class, gets or sets the + that this mapped class is extending. + + + The that this mapped class is extending. + + + + + When implemented by a class, gets or sets a boolean indicating if + explicit polymorphism should be used in Queries. + + + if only classes queried on should be returned, + if any class in the heirarchy should implicitly be returned. + + The value of this is set by the polymorphism attribute. + + + + + + + + + + When implemented by a class, gets or sets a boolean indicating if the identifier is + embedded in the class. + + if the class identifies itself. + + An embedded identifier is true when using a composite-id specifying + properties of the class as the key-property instead of using a class + as the composite-id. + + + + + When implemented by a class, gets the of the class + that is mapped in the class element. + + + The of the class that is mapped in the class element. + + + + + When implemented by a class, gets or sets the + that contains information about the Key. + + The that contains information about the Key. + + + + When implemented by a class, gets or sets the sql string that should + be a part of the where clause. + + + The sql string that should be a part of the where clause. + + + The value of this is set by the where attribute. + + + + + Gets or sets a boolean indicating if only values in the discriminator column that + are mapped will be included in the sql. + + if the mapped discriminator values should be forced. + + The value of this is set by the force attribute on the discriminator element. + + + + + Initializes a new instance of the class. + + The that is the superclass. + + + + Add the to this PersistentClass. + + The to add. + + This also adds the to the Superclass' collection + of SubclassType Properties. + + + + + Adds a that is implemented by a subclass. + + The implemented by a subclass. + + This also adds the to the Superclass' collection + of SubclassType Properties. + + + + + Adds a that a subclass is stored in. + + The the subclass is stored in. + + This also adds the to the Superclass' collection + of SubclassType Tables. + + + + + + + + + + Gets a boolean indicating if this mapped class is inherited from another. + + + because this is a SubclassType. + + + + + Gets an of objects that this mapped class contains. + + + An of objects that + this mapped class contains. + + + This is all of the properties of this mapped class and each mapped class that + it is inheriting from. + + + + + Gets an of objects that this + mapped class reads from and writes to. + + + An of objects that + this mapped class reads from and writes to. + + + This is all of the tables of this mapped class and each mapped class that + it is inheriting from. + + + + + Gets a boolean indicating if the mapped class has a version property. + + if for the Superclass there is a Property for a version. + + + + + + + + + Gets the of the class + that is mapped in the class element. + + + The of the Superclass that is mapped in the class element. + + + + + + + + + + Gets or sets the CacheConcurrencyStrategy + to use to read/write instances of the persistent class to the Cache. + + The CacheConcurrencyStrategy used with the Cache. + + + + Gets the of the class that is mapped in the class element. + + + The of the Superclass that is mapped in the class element. + + + + + Gets or sets the that this mapped class is extending. + + + The that this mapped class is extending. + + + + + Gets or sets the that is used as the id. + + + The from the Superclass that is used as the id. + + + + + Gets or sets the that contains information about the identifier. + + The from the Superclass that contains information about the identifier. + + + + Gets a boolean indicating if the mapped class has a Property for the id. + + if in the Superclass there is a Property for the id. + + + + Gets or sets the that contains information about the discriminator. + + The from the Superclass that contains information about the discriminator. + + + + Gets or set a boolean indicating if the mapped class has properties that can be changed. + + if the Superclass is mutable. + + + + Gets or sets if the mapped class is a subclass. + + + since this mapped class is a subclass. + + + The setter should not be used to set the value to anything but . + + + + + Gets or sets the that is used as the version. + + The from the Superclass that is used as the version. + + + + Gets or sets a boolean indicating if the identifier is + embedded in the class. + + if the Superclass has an embedded identifier. + + An embedded identifier is true when using a composite-id specifying + properties of the class as the key-property instead of using a class + as the composite-id. + + + + + Gets or sets the that contains information about the Key. + + The that contains information about the Key. + + + + Gets or sets a boolean indicating if explicit polymorphism should be used in Queries. + + + The value of the Superclasses IsExplicitPolymorphism property. + + + + + Gets the sql string that should be a part of the where clause. + + + The sql string that should be a part of the where clause. + + + Thrown when the setter is called. The where clause can not be set on the + SubclassType, only the RootClass. + + + + + Gets or Sets the that this class is stored in. + + The this class is stored in. + + This also adds the to the Superclass' collection + of SubclassType Tables. + + + + + + + + + A many-to-one association mapping + + + + A simple-point association (ie. a reference to another entity). + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A map has a primary key consisting of the key columns + + index columns. + + + + + Initializes a new instance of the class. + + The that contains this map mapping. + + + + Gets the appropriate that is + specialized for this list mapping. + + + + + A meta attribute is a named value or values. + + + + + A mapping for a one-to-many association. + + + + + + + + + + No foreign key element for a one-to-many + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A mapping for a one-to-one association. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A Primary Key constraint in the database. + + + + + Generates the SQL string to create the Primary Key Constraint in the database. + + The to use for SQL rules. + + + A string that contains the SQL to create the Primary Key Constraint. + + + + + Generates the SQL string to create the named Primary Key Constraint in the database. + + The to use for SQL rules. + The name to use as the identifier of the constraint in the database. + + + + A string that contains the SQL to create the named Primary Key Constraint. + + + + + Get the SQL string to drop this Constraint in the database. + + The to use for SQL rules. + + + + A string that contains the SQL to drop this Constraint. + + + + + A primitive array has a primary key consisting + of the key columns + index column. + + + + + Indicates whether given properties are generated by the database and, if + so, at what time(s) they are generated. + + + + + Values for this property are never generated by the database. + + + + + Values for this property are generated by the database on insert. + + + + + Values for this property are generated by the database on both insert and update. + + + + + Declaration of a System.Type mapped with the <class> element that + is the root class of a table-per-sublcass, or table-per-concrete-class + inheritance heirarchy. + + + + + The default name of the column for the Identifier + + id is the default column name for the Identifier. + + + + The default name of the column for the Discriminator + + class is the default column name for the Discriminator. + + + + Adds a to the class hierarchy. + + The to add to the hierarchy. + + When a is added this mapped class has the property + set to . + + + + + + + + + + + Gets a boolean indicating if this mapped class is inherited from another. + + + because this is the root mapped class. + + + + + Gets an of objects that this mapped class contains. + + + An of objects that + this mapped class contains. + + + + + Gets an of objects that this + mapped class reads from and writes to. + + + An of objects that + this mapped class reads from and writes to. + + + There is only one in the since + this is the root class. + + + + + Gets a boolean indicating if the mapped class has a version property. + + if there is a Property for a version. + + + + Gets the of the class + that is mapped in the class element. + + + The of the class this mapped class. + + + + + Gets or sets a boolean indicating if the identifier is + embedded in the class. + + if the class identifies itself. + + An embedded identifier is true when using a composite-id specifying + properties of the class as the key-property instead of using a class + as the composite-id. + + + + + Gets or sets the cache region name. + + The region name used with the Cache. + + + + + + + + + Gets or sets the that is used as the id. + + + The that is used as the id. + + + + + Gets or sets the that contains information about the identifier. + + The that contains information about the identifier. + + + + Gets a boolean indicating if the mapped class has a Property for the id. + + if there is a Property for the id. + + + + Gets or sets the that contains information about the discriminator. + + The that contains information about the discriminator. + + + + Gets or sets if the mapped class has subclasses. + + + if the mapped class has subclasses. + + + + + Gets the of the class that is mapped in the class element. + + + this since this is the root mapped class. + + + + + Gets or sets a boolean indicating if explicit polymorphism should be used in Queries. + + + if only classes queried on should be returned, + if any class in the heirarchy should implicitly be returned. + + + + + Gets or sets the that is used as the version. + + The that is used as the version. + + + + Gets or set a boolean indicating if the mapped class has properties that can be changed. + + if the object is mutable. + + + + Gets or sets the that this mapped class is extending. + + + since this is the root class. + + + Thrown when the setter is called. The Superclass can not be set on the + RootClass, only the SubclassType can have a Superclass set. + + + + + Gets or sets the that contains information about the Key. + + The that contains information about the Key. + + + + + + + + + Gets or sets a boolean indicating if only values in the discriminator column that + are mapped will be included in the sql. + + if the mapped discriminator values should be forced. + + + + Gets or sets the sql string that should be a part of the where clause. + + + The sql string that should be a part of the where clause. + + + + + Gets or sets the CacheConcurrencyStrategy + to use to read/write instances of the persistent class to the Cache. + + The CacheConcurrencyStrategy used with the Cache. + + + + A Set with no nullable element columns will have a primary + key consisting of all table columns (ie - key columns + + element columns). + + + + + A simple implementation of AbstractAuxiliaryDatabaseObject in which the CREATE and DROP strings are + provided up front. + + + Contains simple facilities for templating the catalog and schema + names into the provided strings. + This is the form created when the mapping documents use <create/> and <drop/>. + + + + Placeholder for typedef information + + + + An Unique Key constraint in the database. + + + + + Generates the SQL string to create the Unique Key Constraint in the database. + + The to use for SQL rules. + A string that contains the SQL to create the Unique Key Constraint. + + + + Generates the SQL string to create the Unique Key Constraint in the database. + + The to use for SQL rules. + + + + + A string that contains the SQL to create the Unique Key Constraint. + + + + + Get the SQL string to drop this Constraint in the database. + + The to use for SQL rules. + + + + A string that contains the SQL to drop this Constraint. + + + + + Exposes entity class metadata to the application + + + + + Get the type of a particular (named) property + + + Return the values of the mapped properties of the object + + + + The persistent class + + + + + Create a class instance initialized with the given identifier + + + + + Get the value of a particular (named) property + + + + Extract the property values from the given entity. + The entity from which to extract the property values. + The entity-mode of the given entity + The property values. + + + + Set the value of a particular (named) property + + + + + Set the given values to the mapped properties of the given object + + + + + Get the identifier of an instance (throw an exception if no identifier property) + + + + + Set the identifier of an instance (or do nothing if no identifier property) + + + + Does the class implement the interface? + + + Does the class implement the interface? + + + + Get the version number (or timestamp) from the object's version property + (or return null if not versioned) + + + + + The name of the entity + + + + + The name of the identifier property (or return null) + + + + + The names of the class' persistent properties + + + + + The identifier Hibernate type + + + + + The Hibernate types of the classes properties + + + + + Are instances of this class mutable? + + + + + Are instances of this class versioned by a timestamp or version number column? + + + + + Gets the index of the version property + + + + + Get the nullability of the class' persistent properties + + + + Get the "laziness" of the properties of this class + + + Which properties hold the natural id? + + + Does this entity extend a mapped superclass? + + + Does the class support dynamic proxies? + + + Does the class have an identifier property? + + + Does this entity declare a natural id? + + + Does this entity have mapped subclasses? + + + + Exposes collection metadata to the application + + + + + The collection key type + + + + + The collection element type + + + + + The collection index type (or null if the collection has no index) + + + + + Is the collection indexed? + + + + + The name of this collection role + + + + + Is the collection an array? + + + + + Is the collection a primitive array? + + + + + Is the collection lazily initialized? + + + + + Summary description for AbstractCollectionPersister. + + + + + A collection role that may be queried or loaded by outer join. + + + + + Abstraction of all mappings that define properties: entities, collection elements. + + + + + Given a component path expression, get the type of the property + + + + + + + Given a query alias and a property path, return the qualified column name + + + + + + + Given a property path, return the corresponding column name(s). + + + + Get the type of the thing containing the properties + + + + + Anything that can be loaded by outer join - namely persisters for classes or collections. + + + + + All columns to select, when loading. + + + + + Get the where clause part of any joins (optional operation) + + + + + + + + + Get the from clause part of any joins (optional operation) + + + + + + + + + Get the where clause filter, given a query alias and considering enabled session filters + + + + + Very, very, very ugly... + + Does this persister "consume" entity column aliases in the result + set? + + + + Very, very, very ugly... + + Does this persister "consume" collection column aliases in the result + set? + + + + An identifying name; a class name or collection role name. + + + + + The columns to join on. + + + + + Is this instance actually a ICollectionPersister? + + + + + The table to join to. + + + + + A strategy for persisting a collection role. + + + Defines a contract between the persistence strategy and the actual persistent collection framework + and session. Does not define operations that are required for querying collections, or loading by outer join. + + Implements persistence of a collection instance while the instance is + referenced in a particular role. + + This class is highly coupled to the + hierarchy, since double dispatch is used to load and update collection + elements. + + May be considered an immutable view of the mapping object + + + + + Initialize the given collection with the given key + + + + + + + Read the key from a row of the + + + + + Read the element from a row of the + + + + + Read the index from a row of the + + + + + Read the identifier from a row of the + + + + + Completely remove the persistent state of the collection + + + + + + + (Re)create the collection's persistent state + + + + + + + + Delete the persistent state of any elements that were removed from the collection + + + + + + + + Update the persistent state of any elements that were modified + + + + + + + + Insert the persistent state of any new collection elements + + + + + + + + Generates the collection's key column aliases, based on the given + suffix. + + The suffix to use in the key column alias generation. + The key column aliases. + + + + Generates the collection's index column aliases, based on the given + suffix. + + The suffix to use in the index column alias generation. + The index column aliases, or null if not indexed. + + + + Generates the collection's element column aliases, based on the given + suffix. + + The suffix to use in the element column alias generation. + The element column aliases. + + + + Generates the collection's identifier column aliases, based on the given + suffix. + + The suffix to use in the identifier column alias generation. + The identifier column aliases. + + + + Get the cache + + + + Get the cache structure + + + + Get the associated IType + + + + + Get the "key" type (the type of the foreign key) + + + + + Get the "index" type for a list or map (optional operation) + + + + + Get the "element" type + + + + + Return the element class of an array, or null otherwise + + + + + Is this an array or primitive values? + + + + + Is this an array? + + + + Is this a one-to-many association? + + + + Is this a many-to-many association? Note that this is mainly + a convenience feature as the single persister does not + conatin all the information needed to handle a many-to-many + itself, as internally it is looked at as two many-to-ones. + + + + + Is this collection lazyily initialized? + + + + + Is this collection "inverse", so state changes are not propogated to the database. + + + + + Get the name of this collection role (the fully qualified class name, extended by a "property path") + + + + Get the persister of the entity that "owns" this collection + + + + Get the surrogate key generation strategy (optional operation) + + + + + Get the type of the surrogate key + + + + Get the "space" that holds the persistent state + + + + Is cascade delete handled by the database-level + foreign key constraint definition? + + + + + Does this collection cause version increment of the owning entity? + + + + Can the elements of this collection change? + + + + Is this collection role cacheable + + + + + Is this an "indexed" collection? (list or map) + + + + + Does this collection implement "orphan delete"? + + + + + Is this an ordered collection? (An ordered collection is + ordered by the initialization operation, not by sorting + that happens in memory, as in the case of a sorted collection.) + + + + + Generate a list of collection index and element columns + + + + + Get the names of the collection index columns if + this is an indexed collection (optional operation), + aliased by the given table alias + + + + + Get the names of the collection element columns (or the primary + key columns in the case of a one-to-many association), + aliased by the given table alias + + + + + Get the extra where clause filter SQL + + + + + + + Get the order by SQL + + + + + + + Get the order-by to be applied at the target table of a many to many + + The alias for the many-to-many target table + Appropriate order-by fragment or empty string. + + + + Get the index formulas if this is an indexed collection + (optional operation) + + + + + Get the persister of the element class, if this is a + collection of entities (optional operation). Note that + for a one-to-many association, the returned persister + must be OuterJoinLoadable. + + + + + Should we load this collection role by outer joining? + + + + + Get the names of the collection index columns if this is an indexed collection (optional operation) + + + + + Get the names of the collection element columns (or the primary key columns in the case of a one-to-many association) + + + + + Does this collection role have a where clause filter? + + + + + Reads the Element from the IDataReader. The IDataReader will probably only contain + the id of the Element. + + See ReadElementIdentifier for an explanation of why this method will be depreciated. + + + + Return the element class of an array, or null otherwise + + + + + Get the name of this collection role (the fully qualified class name, + extended by a "property path") + + + + + Collection persister for collections of values and many-to-many associations. + + + + + Generate the SQL DELETE that deletes all rows + + + + + + Generate the SQL INSERT that creates a new row + + + + + + Generate the SQL UPDATE that updates a row + + + + + + Generate the SQL DELETE that deletes a particular row + + + + + + Create the + + + + + Summary description for CollectionPropertyMapping. + + + + + The names of all the collection properties. + + + + + Summary description for CompositeElementPropertyMapping. + + + + + Base implementation of a PropertyMapping. + + + + + Summary description for ElementPropertyMapping. + + + + + Summary description for OneToManyPersister. + + + + + Generate the SQL UPDATE that updates all the foreign keys to null + + + + + + Generate the SQL UPDATE that updates a foreign key to a value + + + + + + Not needed for one-to-many association + + + + + + Generate the SQL UPDATE that updates a particular row's foreign + key to null + + + + + + Create the + + + + + Superclass for built-in mapping strategies. Implements functionalty common to both mapping + strategies + + + May be considered an immutable view of the mapping object + + + + + A ClassPersister that may be loaded by outer join using + the OuterJoinLoader hierarchy and may be an element + of a one-to-many association. + + + + + Implemented by ClassPersister that uses Loader. There are several optional + operations used only by loaders that inherit OuterJoinLoader + + + + + Get the concrete subclass corresponding to the given discriminator value + + + + + Get the result set aliases used for the identifier columns, given a suffix + + + + + Get the result set aliases used for the property columns, given a suffix (properties of this class, only). + + + + + Get the result set column names mapped for this property (properties of this class, only). + + + + + Get the alias used for the discriminator column, given a suffix + + + + + Retrieve property values from one row of a result set + + + + + The discriminator type + + + + + Get the names of columns used to persist the identifier + + + + + Get the name of the column used as a discriminator + + + + + Does the persistent class have subclasses? + + + + Does the result set contain rowids? + + + + Generate a list of collection index and element columns + + + + + + + + How many properties are there, for this class and all subclasses? (optional operation) + + + + + + May this property be fetched using an SQL outerjoin? + + + + + + + Get the cascade style of this (subclass closure) property + + + + + Is this property defined on a subclass of the mapped class? + + + + + + + Get an array of the types of all properties of all subclasses (optional operation) + + + + + + + Get the name of the numbered property of the class or a subclass + (optional operation) + + + + + + + Is the numbered property of the class of subclass nullable? + + + + + Return the column names used to persist all properties of all sublasses of the persistent class + (optional operation) + + + + + Return the table name used to persist the numbered property of + the class or a subclass + (optional operation) + + + + + Given the number of a property of a subclass, and a table alias, return the aliased column names + (optional operation) + + + + + + + + Get the main from table fragment, given a query alias (optional operation) + + + + + + + Get the column names for the given property path + + + + + Get the table name for the given property path + + + + + Extends the generic ILoadable contract to add operations required by HQL + + + + + Given a query alias and an identifying suffix, render the intentifier select fragment. + + + + + + + + + Given a property name, determine the number of the table which contains the column + to which this property is mapped. + + The name of the property. + The nunber of the table to which the property is mapped. + + Note that this is not relative to the results from {@link #getConstraintOrderedTableNameClosure()}. + It is relative to the subclass table name closure maintained internal to the persister (yick!). + It is also relative to the indexing used to resolve {@link #getSubclassTableName}... + + + + Determine whether the given property is declared by our + mapped class, our super class, or one of our subclasses... +

+ Note: the method is called 'subclass property...' simply + for consistency sake (e.g. {@link #getSubclassPropertyTableNumber} +

+ The property name. + The property declarer +
+ + + Get the name of the table with the given index from the internal array. + + The index into the internal array. + + + + + Is this an abstract class? + + + + Is this class explicit polymorphism only? + + + + + The class that this class is mapped as a subclass of - not necessarily the direct superclass + + + + Get the names of columns used to persist the identifier + + + + The discriminator value for this particular concrete subclass, as a string that may be + embedded in a select statement + + + + + The discriminator value for this particular concrete subclass + + The DiscriminatorValue is specific of NH since we are using strongly typed parameters for SQL query. + + + + Is the inheritence hierarchy described by this persister contained across + multiple tables? + + True if the inheritence hierarchy is spread across multiple tables; false otherwise. + + + + Get the names of all tables used in the hierarchy (up and down) ordered such + that deletes in the given order would not cause contraint violations. + + The ordered array of table names. + + + + For each table specified in , get + the columns that define the key between the various hierarchy classes. + + + The first dimension here corresponds to the table indexes returned in + . + + The second dimension should have the same length across all the elements in + the first dimension. If not, that'd be a problem ;) + + + + + Get the name of the temporary table to be used to (potentially) store id values + when performing bulk update/deletes. + + The appropriate temporary table name. + + + + Get the appropriate DDL command for generating the temporary table to + be used to (potentially) store id values when performing bulk update/deletes. + + The appropriate temporary table creation command. + + + Is the version property included in insert statements? + + + + Describes a class that may be loaded via a unique key. + + + + + Load an instance of the persistent class, by a unique key other than the primary key. + + + + + Get the property number of the unique key property + + + + + A class persister that supports queries expressed in the platform native SQL dialect. + + + + + Returns the column alias names used to persist/query the numbered property of the class or a subclass (optional operation). + + + + + Return the column names used to persist/query the named property of the class or a subclass (optional operation). + + + + + All columns to select, when loading. + + + + + Get the type + + + + + Contract for things that can be locked via a . + + + Currently only the root table gets locked, except for the case of HQL and Criteria queries + against dialects which do not support either (1) FOR UPDATE OF or (2) support hint locking + (in which case *all* queried tables would be locked). + + + + + Get the SQL alias this persister would use for the root table + given the passed driving alias. + + + The driving alias; or the alias for the table mapped by this persister in the hierarchy. + + The root table alias. + + + + Locks are always applied to the "root table". + + + + + Get the names of columns on the root table used to persist the identifier. + + + + + For versioned entities, get the name of the column (again, expected on the + root table) used to store the version values. + + + + + To build the SQL command in pessimistic lock + + + + + Decide which tables need to be updated + + The indices of all the entity properties considered dirty. + Whether any collections owned by the entity which were considered dirty. + Array of booleans indicating which table require updating. + + The return here is an array of boolean values with each index corresponding + to a given table in the scope of this persister. + + + + + Generate the SQL that selects the version number by id + + + + + Retrieve the version number + + + + + Warning: + When there are duplicated property names in the subclasses + of the class, this method may return the wrong table + number for the duplicated subclass property (note that + SingleTableEntityPersister defines an overloaded form + which takes the entity name. + + + + + Get the column names for the numbered property of this class + + + + + Must be called by subclasses, at the end of their constructors + + + + Generate the SQL that updates a row by id (and version) + + + Generate the SQL that inserts a row + + + Marshall the fields of a persistent instance to a prepared statement + + + + Unmarshall the fields of a persistent instance from a result set, + without resolving associations or collections + + + + + Perform an SQL INSERT, and then retrieve a generated identifier. + + + This form is used for PostInsertIdentifierGenerator-style ids (IDENTITY, select, etc). + + + + + Perform an SQL INSERT. + + + This for is used for all non-root tables as well as the root table + in cases where the identifier value is known before the insert occurs. + + + + Perform an SQL UPDATE or SQL INSERT + + + + Perform an SQL DELETE + + + + + Load an instance using the appropriate loader (as determined by + + + + + Transform the array of property indexes to an array of booleans, true when the property is dirty + + + + Which properties appear in the SQL update? (Initialized, updateable ones!) + + + + Determines whether the specified entity is an instance of the class + managed by this persister. + + The entity. + The entity mode. + + if the specified entity is an instance; otherwise, . + + + + + The queries that delete rows by id (and version) + + + + + The queries that insert rows with a given id + + + + + The queries that update rows by id (and version) + + + + + The query that inserts a row, letting the database generate an id + + The IDENTITY-based insertion query. + + + + We can't immediately add to the cache if we have formulas + which must be evaluated, or if we have the possibility of + two concurrent updates to the same item being merged on + the database. This can happen if (a) the item is not + versioned and either (b) we have dynamic update enabled + or (c) we have multiple tables holding the state of the + item. + + + + The property name of the "special" identifier property in HQL + + + + A IEntityPersister implementing the normalized "table-per-subclass" mapping strategy + + + + + Constructs the NormalizedEntityPerister for the PersistentClass. + + The PeristentClass to create the EntityPersister for. + The configured . + The SessionFactory that this EntityPersister will be stored in. + The mapping used to retrieve type information. + + + + Find the Index of the table name from a list of table names. + + The name of the table to find. + The array of table names + The Index of the table in the array. + Thrown when the tableName specified can't be found + + + + Not really a Loader, just a wrapper around a named query. + + + + + Default implementation of the ClassPersister interface. Implements the + "table-per-class hierarchy" mapping strategy for an entity class. + + + + Generate the SQL that selects a row by id + + + + Factory for IEntityPersister and ICollectionPersister instances. + + + + + Creates a built in Entity Persister or a custom Persister. + + + + + Creates a specific Persister - could be a built in or custom persister. + + + + Represents a "back-reference" to the id of a collection owner. + + + + Abstracts the notion of a "property". Defines a strategy for accessing the + value of a mapped property. + + + + + When implemented by a class, create a "getter" for the mapped property. + + The to find the Property in. + The name of the mapped Property to get. + + The to use to get the value of the Property from an + instance of the . + + Thrown when a Property specified by the propertyName could not + be found in the . + + + + + When implemented by a class, create a "setter" for the mapped property. + + The to find the Property in. + The name of the mapped Property to set. + + The to use to set the value of the Property on an + instance of the . + + + Thrown when a Property specified by the propertyName could not + be found in the . + + + + The Setter implementation for id backrefs. + + + + Sets values of a particular mapped property. + + + + + When implemented by a class, sets the value of the Property/Field on the object. + + The object to set the Property value in. + The value to set the Property to. + + Thrown when there is a problem setting the value in the target. + + + + + When implemented by a class, gets the name of the Property. + + The name of the Property or . + + This is an optional operation - if it is not implemented then + is an acceptable value to return. + + + + + When implemented by a class, gets the for the set + accessor of the property. + + + This is an optional operation - if the is not + for a property set then is an acceptable value to return. + It is used by the proxies to determine which setter to intercept for the + identifier property. + + + + The Getter implementation for id backrefs. + + + + Gets values of a particular mapped property. + + + + + When implemented by a class, gets the value of the Property/Field from the object. + + The object to get the Property/Field value from. + + The value of the Property for the target. + + + Thrown when there is a problem getting the value from the target. + + + + Get the property value from the given owner instance. + The instance containing the value to be retreived. + a map of merged persistent instances to detached instances + The session from which this request originated. + The extracted value. + + + + When implemented by a class, gets the that the Property/Field returns. + + The that the Property returns. + + + + When implemented by a class, gets the name of the Property. + + The name of the Property or . + + This is an optional operation - if the is not + for a Property get then is an acceptable value to return. + + + + + When implemented by a class, gets the for the get + accessor of the property. + + + This is an optional operation - if the is not + for a property get then is an acceptable value to return. + It is used by the proxies to determine which getter to intercept for the + identifier property. + + + + + Accesses mapped property values via a get/set pair, which may be nonpublic. + The default (and recommended strategy). + + + + + Create a for the mapped property. + + The to find the Property in. + The name of the mapped Property to get. + + The to use to get the value of the Property from an + instance of the . + + Thrown when a Property specified by the propertyName could not + be found in the . + + + + + Create a for the mapped property. + + The to find the Property in. + The name of the mapped Property to get. + + The to use to set the value of the Property on an + instance of the . + + + Thrown when a Property specified by the propertyName could not + be found in the . + + + + + Helper method to find the Property get. + + The to find the Property in. + The name of the mapped Property to get. + + The for the Property get or + if the Property could not be found. + + + + + Helper method to find the Property set. + + The to find the Property in. + The name of the mapped Property to set. + + The for the Property set or + if the Property could not be found. + + + + + An for a Property get. + + + + + An that can emit IL to get the property value. + + + + + Emit IL to get the property value from the object on top of the stack. + + + + + Initializes a new instance of . + + The that contains the Property get. + The for reflection. + The name of the Property. + + + + Gets the value of the Property from the object. + + The object to get the Property value from. + + The value of the Property for the target. + + + + + Gets the that the Property returns. + + The that the Property returns. + + + + Gets the name of the Property. + + The name of the Property. + + + + Gets the for the Property. + + + The for the Property. + + + + + An for a Property set. + + + + + An that can emit IL to set the property value. + + + + + Emit IL to set the property of an object to the value. The object + is loaded onto the stack first, then the value, then this method + is called. + + + + + Initializes a new instance of . + + The that contains the Property set. + The for reflection. + The name of the mapped Property. + + + + Sets the value of the Property on the object. + + The object to set the Property value in. + The value to set the Property to. + + Thrown when there is a problem setting the value in the target. + + + + + Gets the name of the mapped Property. + + The name of the mapped Property or . + + + + Gets the for the mapped Property. + + The for the mapped Property. + + + + Implementation of for fields that are the + camelCase version of the PropertyName + + + + + A Strategy for converting a mapped property name to a Field name. + + + + + When implemented by a class, converts the Property's name into a Field name + + The name of the mapped property. + The name of the Field. + + + + Converts the Property's name into a Field name by making the first character + lower case. + + The name of the mapped property. + The name of the Field in CamelCase format. + + + + Implementation of for fields that are prefixed with + an underscore and the PropertyName is changed to camelCase. + + + + + Converts the Property's name into a Field name by making the first character + of the propertyName lowercase and prefixing it with an underscore. + + The name of the mapped property. + The name of the Field in CamelCase format prefixed with an underscore. + + + + Access the mapped property by using a Field to get and set the value. + + + The is useful when you expose getter and setters + for a Property, but they have extra code in them that shouldn't be executed when NHibernate + is setting or getting the values for loads or saves. + + + + + Initializes a new instance of . + + + + + Initializes a new instance of . + + The to use. + + + + Create a to get the value of the mapped Property + through a Field. + + The to find the Property in. + The name of the mapped Property to get. + + The to use to get the value of the Property from an + instance of the . + + Thrown when a Field specified by the propertyName could not + be found in the . + + + + + Create a to set the value of the mapped Property + through a Field. + + The to find the mapped Property in. + The name of the mapped Property to set. + + The to use to set the value of the Property on an + instance of the . + + + Thrown when a Field for the Property specified by the propertyName using the + could not be found in the . + + + + + Helper method to find the Field. + + The to find the Field in. + The name of the Field to find. + + The for the field. + + + Thrown when a field could not be found. + + + + + Converts the mapped property's name into a Field using + the if one exists. + + The name of the Property. + The name of the Field. + + + + Gets the used to convert the name of the + mapped Property in the hbm.xml file to the name of the field in the class. + + The or . + + + + An that uses a Field instead of the Property get. + + + + + Initializes a new instance of . + + The that contains the field to use for the Property get. + The for reflection. + The name of the Field. + + + + Gets the value of the Field from the object. + + The object to get the Field value from. + + The value of the Field for the target. + + + + + Gets the that the Field returns. + + The that the Field returns. + + + + Gets the name of the Property. + + since this is a Field - not a Property. + + + + Gets the for the Property. + + since this is a Field - not a Property. + + + + An that uses a Field instead of the Property set. + + + + + Initializes a new instance of . + + The that contains the Field to use for the Property set. + The for reflection. + The name of the Field. + + + + Sets the value of the Field on the object. + + The object to set the Field value in. + The value to set the Field to. + + Thrown when there is a problem setting the value in the target. + + + + + Gets the name of the Property. + + since this is a Field - not a Property. + + + + Gets the for the Property. + + since this is a Field - not a Property. + + + Represents a "back-reference" to the index of a collection. + + + Constructs a new instance of IndexPropertyAccessor. + The collection role which this back ref references. + The owner entity name. + + + The Setter implementation for index backrefs. + + + The Getter implementation for index backrefs. + + + + Implementation of for fields that are + the PropertyName in all LowerCase characters. + + + + + Converts the Property's name into a Field name by making the all characters + of the propertyName lowercase. + + The name of the mapped property. + The name of the Field in lowercase. + + + + Implementation of for fields that are prefixed with + an underscore and the PropertyName is changed to lower case. + + + + + Converts the Property's name into a Field name by making the all characters + of the propertyName lowercase and prefixing it with an underscore. + + The name of the mapped property. + The name of the Field in lowercase prefixed with an underscore. + + + Used to declare properties not represented at the pojo level + + + A Getter which will always return null. It should not be called anyway. + + + A Setter which will just do nothing. + + + + Access the mapped property through a Property get to get the value + and go directly to the Field to set the value. + + + This is most useful because Classes can provider a get for the Property + that is the <id> but tell NHibernate there is no setter for the Property + so the value should be written directly to the field. + + + + + Initializes a new instance of . + + The to use. + + + + Creates an to get the value from the Property. + + The to find the Property in. + The name of the mapped Property to get. + + The to use to get the value of the Property from an + instance of the . + + Thrown when a Property specified by the propertyName could not + be found in the . + + + + + Create a to set the value of the mapped Property + through a Field. + + The to find the mapped Property in. + The name of the mapped Property to set. + + The to use to set the value of the Property on an + instance of the . + + + Thrown when a Field for the Property specified by the propertyName using the + could not be found in the . + + + + + Converts the Property's name into a Field name by making the first character + of the propertyName uppercase and prefixing it with the letter 'm'. + + The name of the mapped property. + The name of the Field in PascalCase format prefixed with an 'm'. + + + + Implementation of for fields that are prefixed with + an m_ and the first character in PropertyName capitalized. + + + + + Converts the Property's name into a Field name by making the first character + of the propertyName uppercase and prefixing it with the letter 'm' + and an underscore. + + The name of the mapped property. + The name of the Field in PascalCase format prefixed with an 'm' and an underscore. + + + + Implementation of for fields that are prefixed with + an _ and the first character in PropertyName capitalized. + + + + + Converts the Property's name into a Field name by making the first character + of the propertyName uppercase and prefixing it with an underscore. + + The name of the mapped property. + The name of the Field in PascalCase format prefixed with an underscore. + + + + Factory for creating the various PropertyAccessor strategies. + + + + + Initializes the static members in . + + + + + Gets or creates the specified by the type. + + + The specified by the type. + + + The built in ways of accessing the values of Properties in your domain class are: + + + + Access Method + How NHibernate accesses the Mapped Class. + + + property + + The name attribute is the name of the Property. This is the + default implementation. + + + + field + + The name attribute is the name of the field. If you have any Properties + in the Mapped Class those will be bypassed and NHibernate will go straight to the + field. This is a good option if your setters have business rules attached to them + or if you don't want to expose a field through a Getter & Setter. + + + + nosetter + + The name attribute is the name of the Property. NHibernate will use the + Property's get method to retreive the value and will use the field + to set the value. This is a good option for <id> Properties because this access method + allow's users of the Class to get the value of the Id but not set the value. + + + + Assembly Qualified Name + + If NHibernate's built in s are not what is needed for your + situation then you are free to build your own. Provide an Assembly Qualified Name so that + NHibernate can call Activator.CreateInstance(AssemblyQualifiedName) to create it. + + + + + In order for the nosetter to know the name of the field to access NHibernate needs to know + what the naming strategy is. The following naming strategies are built into NHibernate: + + + + Naming Strategy + How NHibernate converts the value of the name attribute to a field name. + + + camelcase + + The name attribute should be changed to CamelCase to find the field. + <property name="Foo" ... > finds a field foo. + + + + camelcase-underscore + + The name attribute should be changed to CamelCase and prefixed with + an underscore to find the field. + <property name="Foo" ... > finds a field _foo. + + + + pascalcase-underscore + + The name attribute should be prefixed with an underscore + to find the field. + <property name="Foo" ... > finds a field _Foo. + + + + pascalcase-m-underscore + + The name attribute should be prefixed with an 'm' and underscore + to find the field. + <property name="Foo" ... > finds a field m_Foo. + + + + pascalcase-m + + The name attribute should be prefixed with an 'm'. + <property name="Foo" ... > finds a field mFoo. + + + + lowercase + + The name attribute should be changed to lowercase to find the field. + <property name="FooBar" ... > finds a field foobar. + + + + lowercase-underscore + + The name attribute should be changed to lowercase and prefixed with + and underscore to find the field. + <property name="FooBar" ... > finds a field _foobar. + + + + + The naming strategy can also be appended at the end of the field access method. Where + this could be useful is a scenario where you do expose a get and set method in the Domain Class + but NHibernate should only use the fields. + + + With a naming strategy and a get/set for the Property available the user of the Domain Class + could write an Hql statement from Foo as foo where foo.SomeProperty = 'a'. If no naming + strategy was specified the Hql statement whould have to be from Foo as foo where foo._someProperty + (assuming CamelCase with an underscore field naming strategy is used). + + + + + Retrieves a PropertyAccessor instance based on the given property definition and entity mode. + The property for which to retrieve an accessor. + The mode for the resulting entity. + An appropriate accessor. + + + Lazy initializer for "dynamic-map" entity representations. + + + + Provides the base functionallity to Handle Member calls into a dynamically + generated NHibernate Proxy. + + + This could be an extension point later if the .net framework ever gets a Proxy + class that is similar to the java.lang.reflect.Proxy or if a library similar + to cglib was made in .net. + + + + + Perform an ImmediateLoad of the actual object for the Proxy. + + + Thrown when the Proxy has no Session or the Session is closed or disconnected. + + + + + Return the Underlying Persistent Object, initializing if necessary. + + The Persistent Object this proxy is Proxying. + + + + Return the Underlying Persistent Object in a given , or null. + + The Session to get the object from. + The Persistent Object this proxy is Proxying, or . + + + + + + Get the entity name + + + + + + + + + + + + + If this is returned by Invoke then the subclass needs to Invoke the + method call against the object that is being proxied. + + + + + Create a LazyInitializer to handle all of the Methods/Properties that are called + on the Proxy. + + The entityName + The Id of the Object we are Proxying. + The ISession this Proxy is in. + + + + Perform an ImmediateLoad of the actual object for the Proxy. + + + Thrown when the Proxy has no Session or the Session is closed or disconnected. + + + + + Return the Underlying Persistent Object, initializing if necessary. + + The Persistent Object this proxy is Proxying. + + + + Return the Underlying Persistent Object in a given , or null. + + The Session to get the object from. + The Persistent Object this proxy is Proxying, or . + + + + + + + + + Proxy for "dynamic-map" entity representations. + + + + A marker interface so NHibernate can know if it is dealing with + an object that is a Proxy. + + + + This interface should not be implemented by anything other than + the Dynamically generated Proxy. If it is implemented by a class then + NHibernate will think that class is a Proxy and will not work. + + + It has to be public scope because + the Proxies are created in a seperate DLL than NHibernate. + + + + + Get the underlying lazy initialization handler. + + + Contract for run-time, proxy-based lazy initialization proxies. + + + Called immediately after instantiation of this factory. + + The name of the entity for which this factory should generate proxies. + + + The entity class for which to generate proxies; not always the same as the entityName. + + + The interfaces to expose in the generated proxy; + is already included in this collection. + + + Reference to the identifier getter method; invocation on this method should not force initialization + + + Reference to the identifier setter method; invocation on this method should not force initialization + + + For composite identifier types, a reference to + the type of the identifier + property; again accessing the id should generally not cause + initialization - but need to bear in mind key-many-to-one + mappings. + + Indicates a problem completing post + + Essentially equivalent to contructor injection, but contracted + here via interface. + + + + + Create a new proxy + + The id value for the proxy to be generated. + The session to which the generated proxy will be associated. + The generated proxy. + Indicates problems generating requested proxy. + + + + A for use with the Castle Dynamic Class Generator. + + + + Lazy initializer for POCOs + + + + Adds all of the information into the SerializationInfo that is needed to + reconstruct the proxy during deserialization or to replace the proxy + with the instantiated target. + + + This will only be called if the Dynamic Proxy generator does not handle serialization + itself or delegates calls to the method GetObjectData to the LazyInitializer. + + + + + Invokes the method if this is something that the LazyInitializer can handle + without the underlying proxied object being instantiated. + + The name of the method/property to Invoke. + The arguments to pass the method/property. + The proxy object that the method is being invoked on. + + The result of the Invoke if the underlying proxied object is not needed. If the + underlying proxied object is needed then it returns the result + which indicates that the Proxy will need to forward to the real implementation. + + + + + Initializes a new object. + + + The Class to Proxy. + The Id of the Object we are Proxying. + + + + The ISession this Proxy is in. + + + + Invoke the actual Property/Method using the Proxy or instantiate the actual + object and use it when the Proxy can't handle the method. + + The from the generated Castle.DynamicProxy. + + + + Build a proxy using the Castle.DynamicProxy library. + + The value for the Id. + The Session the proxy is in. + A fully built INHibernateProxy. + + + + NHibernateProxyHelper provides convenience methods for working with + objects that might be instances of Classes or the Proxied version of + the Class. + + + + + Get the class of an instance or the underlying class of a proxy (without initializing the proxy!). + It is almost always better to use the entity name! + + The object to get the type of. + The Underlying Type for the object regardless of if it is a Proxy. + + + + Get the true, underlying class of a proxied persistent class. This operation + will NOT initialize the proxy and thus may return an incorrect result. + + a persistable object or proxy + guessed class of the instance + + This method is approximate match for Session.bestGuessEntityName in H3.2 + + + + + Validates whether can be specified as the base class + (or an interface) for a dynamically-generated proxy. + + + A collection of errors, if any, or if none were found. + + The type to validate. + + + + Aliases tables and fields for Sql Statements. + + + Several methods of this class take an additional + parameter, while their Java counterparts + do not. The dialect is used to correctly quote and unquote identifiers. + Java versions do the quoting and unquoting themselves and fail to + consider dialect-specific rules, such as escaping closing brackets in + identifiers on MS SQL 2000. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + An ANSI SQL CASE expression. + case when ... then ... end as ... + + This class looks StringHelper.SqlParameter safe... + + + Abstract SQL case fragment renderer + + + + An ANSI-style Join. + + + + + + + + Sets the op + + The op to set + + + + + + + + + + + + + + + + + + + + + + + + + + + + + An Oracle-style DECODE function. + + decode(pkvalue, key1, 1, key2, 2, ..., 0) + + + + + + + + Represents an SQL for update of ... nowait statement + + + + + Represents an ... in (...) expression + + + + + Add a value to the value list. Value may be a string, + a , or one of special values + or . + + + + + + + + + + + + + + + + + + + + + + + + + + An Oracle-style (theta) Join + + + + + This method is a bit of a hack, and assumes + that the column on the "right" side of the + join appears on the "left" side of the + operator, which is extremely wierd if this + was a normal join condition, but is natural + for a filter. + + + + + A placeholder for an ADO.NET parameter in an . + + + + + Used as a placeholder when parsing HQL or SQL queries. + + + + + Generates an array of parameters for the given SqlTypes. + + The number of parameters to generate. + An array of objects + + + + Determines wether this instance and the specified object + are of the same type and have the same values. + + An object to compare to this instance. + + if the object equals the current instance. + + + + + Gets a hash code for the parameter. + + + An value for the hash code. + + + + + Summary description for QueryJoinFragment. + + + + + Summary description for QuerySelect. + + + + + Certain databases don't like spaces around these operators. + + + This needs to contain both a plain string and a + SqlString version of the operator because the portions in + the WHERE clause will come in as SqlStrings since there + might be parameters, other portions of the clause come in + as strings since there are no parameters. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Adds a string containing a valid "order by" sql statement + to this QuerySelect + + The "order by" sql statement. + + + + + + + + + + + + + + + + + Represents part of an SQL SELECT clause + + + + + Equivalent to ToSqlStringFragment. + + + + In H3, it is called ToFragmentString(). It appears to be + functionally equivalent as ToSqlStringFragment() here. + + + + + The base class for all of the SqlBuilders. + + + + + Converts the ColumnNames and ColumnValues to a WhereFragment + + The names of the Columns to Add to the WhereFragment + A SqlString that contains the WhereFragment + This just calls the overloaded ToWhereFragment() with the operator as " = " and the tableAlias null. + + + + Converts the ColumnNames and ColumnValues to a WhereFragment + + The Alias for the Table. + The names of the Columns to Add to the WhereFragment + A SqlString that contains the WhereFragment + This defaults the op to " = " + + + + Converts the ColumnNames and ColumnValues to a WhereFragment + + The names of the Columns to Add to the WhereFragment + The operator to use between the names & values. For example " = " or "!=" + A SqlString that contains the WhereFragment + + + + Converts the ColumnNames and ColumnValues to a WhereFragment + + The Alias for the Table. + The names of the Columns to Add to the WhereFragment + The operator to use between the names & values. For example " = " or "!=" + A SqlString that contains the WhereFragment + + + + A class that builds an DELETE sql statement. + + + + + Sets the IdentityColumn for the DELETE sql to use. + + An array of the column names for the Property + The IType of the Identity Property. + The SqlDeleteBuilder. + + + + Sets the VersionColumn for the DELETE sql to use. + + An array of the column names for the Property + The IVersionType of the Version Property. + The SqlDeleteBuilder. + + + + Adds the columns for the Type to the WhereFragment + + The names of the columns to add. + The IType of the property. + The operator to put between the column name and value. + The SqlDeleteBuilder + + + + Adds a string to the WhereFragement + + A well formed sql statement with no parameters. + The SqlDeleteBuilder + + + + Builds a SELECT SQL statement. + + + + + Sets the text that should appear after the FROM + + The fromClause to set + The SqlSelectBuilder + + + + Sets the text that should appear after the FROM + + The name of the Table to get the data from + The Alias to use for the table name. + The SqlSelectBuilder + + + + Sets the text that should appear after the FROM + + The fromClause in a SqlString + The SqlSelectBuilder + + + + Sets the text that should appear after the ORDER BY. + + The orderByClause to set + The SqlSelectBuilder + + + + Sets the text that should appear after the GROUP BY. + + The groupByClause to set + The SqlSelectBuilder + + + + Sets the SqlString for the OUTER JOINs. + + + All of the Sql needs to be included in the SELECT. No OUTER JOINS will automatically be + added. + + The outerJoinsAfterFrom to set + The outerJoinsAfterWhere to set + The SqlSelectBuilder + + + + Sets the text for the SELECT + + The selectClause to set + The SqlSelectBuilder + + + + Sets the text for the SELECT + + The selectClause to set + The SqlSelectBuilder + + + + Sets the criteria to use for the WHERE. It joins all of the columnNames together with an AND. + + + The names of the columns + The Hibernate Type + The SqlSelectBuilder + + + + Sets the prebuilt SqlString to the Where clause + + The SqlString that contains the sql and parameters to add to the WHERE + This SqlSelectBuilder + + + + ToSqlString() is named ToStatementString() in H3 + + + + + + + + + Summary description for SqlSimpleSelectBuilder. + + + + + + + + + + + + Adds a columnName to the SELECT fragment. + + The name of the column to add. + The SqlSimpleSelectBuilder + + + + Adds a columnName and its Alias to the SELECT fragment. + + The name of the column to add. + The alias to use for the column + The SqlSimpleSelectBuilder + + + + Adds an array of columnNames to the SELECT fragment. + + The names of the columns to add. + The SqlSimpleSelectBuilder + + + + Adds an array of columnNames with their Aliases to the SELECT fragment. + + The names of the columns to add. + The aliases to use for the columns + The SqlSimpleSelectBuilder + + + + Gets the Alias that should be used for the column + + The name of the column to get the Alias for. + The Alias if one exists, null otherwise + + + + Sets the IdentityColumn for the SELECT sql to use. + + An array of the column names for the Property + The IType of the Identity Property. + The SqlSimpleSelectBuilder. + + + + Sets the VersionColumn for the SELECT sql to use. + + An array of the column names for the Property + The IVersionType of the Version Property. + The SqlSimpleSelectBuilder. + + + + Set the Order By fragment of the Select Command + + The OrderBy fragment. It should include the SQL "ORDER BY" + The SqlSimpleSelectBuilder + + + + Adds the columns for the Type to the WhereFragment + + The names of the columns to add. + The IType of the property. + The operator to put between the column name and value. + The SqlSimpleSelectBuilder + + + + + + + This is a non-modifiable SQL statement that is ready to be prepared + and sent to the Database for execution. + + + + If you need to modify this object pass it to a and + get a new object back from it. + + + + + + Appends the SqlString parameter to the end of the current SqlString to create a + new SqlString object. + + The SqlString to append. + A new SqlString object. + + A SqlString object is immutable so this returns a new SqlString. If multiple Appends + are called it is better to use the SqlStringBuilder. + + + + + Appends the string parameter to the end of the current SqlString to create a + new SqlString object. + + The string to append. + A new SqlString object. + + A SqlString object is immutable so this returns a new SqlString. If multiple Appends + are called it is better to use the SqlStringBuilder. + + + + + Compacts the SqlString into the fewest parts possible. + + A new SqlString. + + Combines all SqlParts that are strings and next to each other into + one SqlPart. + + + + + Determines whether the end of this instance matches the specified String. + + A string to seek at the end. + if the end of this instance matches value; otherwise, + + + + Replaces all occurrences of a specified in this instance, + with another specified . + + A String to be replaced. + A String to replace all occurrences of oldValue. + + A new SqlString with oldValue replaced by the newValue. The new SqlString is + in the compacted form. + + + + + Determines whether the beginning of this SqlString matches the specified System.String, + using case-insensitive comparison. + + The System.String to seek + true if the SqlString starts with the value. + + + + Retrieves a substring from this instance. The substring starts at a specified character position. + + The starting character position of a substring in this instance. + + A new SqlString to the substring that begins at startIndex in this instance. + + + If the startIndex is greater than the length of the SqlString then is returned. + + + + + Returns the index of the first occurence of , case-insensitive. + + Text to look for in the . Must be in lower + case. + + The text must be located entirely in a string part of the . + Searching for "a ? b" in an consisting of + "a ", Parameter, " b" will result in no matches. + + The index of the first occurence of , or -1 + if not found. + + + + Removes all occurrences of white space characters from the beginning and end of this instance. + + + A new SqlString equivalent to this instance after white space characters + are removed from the beginning and end. + + + + + + + + + + + + + + + Returns the SqlString in a string where it looks like + SELECT col1, col2 FROM table WHERE col1 = ? + + + The question mark is used as the indicator of a parameter because at + this point we are not using the specific provider so we don't know + how that provider wants our parameters formatted. + + A provider-neutral version of the CommandText + + + + Returns substring of this SqlString starting with the specified + . If the text is not found, returns an + empty, not-null SqlString. + + + The method performs case-insensitive comparison, so the + passed should be in lower case. + + + + + Parse SQL in and create a SqlString representing it. + + + Parameter marks in single quotes will be correctly skipped, but otherwise the + lexer is very simple and will not parse double quotes or escape sequences + correctly, for example. + + + + + Gets the number of SqlParts contained in this SqlString. + + The number of SqlParts contained in this SqlString. + + + + The SqlStringBuilder is used to construct a SqlString. + + + + The SqlString is a nonmutable class so it can't have sql parts added + to it. Instead this class should be used to generate a new SqlString. + The SqlStringBuilder is to SqlString what the StringBuilder is to + a String. + + + This is different from the original version of SqlString because this does not + hold the sql string in the form of "column1=@column1" instead it uses an array to + build the sql statement such that + object[0] = "column1=" + object[1] = ref to column1 parameter + + + What this allows us to do is to delay the generating of the parameter for the sql + until the very end - making testing dialect indifferent. Right now all of our test + to make sure the correct sql is getting built are specific to MsSql2000Dialect. + + + + + + Create an empty StringBuilder with the default capacity. + + + + + Create a StringBuilder with a specific capacity. + + The number of parts expected. + + + + Create a StringBuilder to modify the SqlString + + The SqlString to modify. + + + + Adds the preformatted sql to the SqlString that is being built. + + The string to add. + This SqlStringBuilder + + + + Adds the Parameter to the SqlString that is being built. + The correct operator should be added before the Add(Parameter) is called + because there will be no operator ( such as "=" ) placed between the last Add call + and this Add call. + + The Parameter to add. + This SqlStringBuilder + + + + Attempts to discover what type of object this is and calls the appropriate + method. + + The part to add when it is not known if it is a Parameter, String, or SqlString. + This SqlStringBuilder. + Thrown when the part is not a Parameter, String, or SqlString. + + + + Adds an existing SqlString to this SqlStringBuilder. It does NOT add any + prefix, postfix, operator, or wrap around this. It is equivalent to just + adding a string. + + The SqlString to add to this SqlStringBuilder + This SqlStringBuilder + This calls the overloaded Add(sqlString, null, null, null, false) + + + + Adds an existing SqlString to this SqlStringBuilder + + The SqlString to add to this SqlStringBuilder + String to put at the beginning of the combined SqlString. + How these Statements should be junctioned "AND" or "OR" + String to put at the end of the combined SqlString. + This SqlStringBuilder + + This calls the overloaded Add method with an array of SqlStrings and wrapStatment=false + so it will not be wrapped with a "(" and ")" + + + + + Adds existing SqlStrings to this SqlStringBuilder + + The SqlStrings to combine. + String to put at the beginning of the combined SqlString. + How these SqlStrings should be junctioned "AND" or "OR" + String to put at the end of the combined SqlStrings. + This SqlStringBuilder + This calls the overloaded Add method with wrapStatement=true + + + + Adds existing SqlStrings to this SqlStringBuilder + + The SqlStrings to combine. + String to put at the beginning of the combined SqlStrings. + How these SqlStrings should be junctioned "AND" or "OR" + String to put at the end of the combined SqlStrings. + Wrap each SqlStrings with "(" and ")" + This SqlStringBuilder + + + + Insert a string containing sql into the SqlStringBuilder at the specified index. + + The zero-based index at which the sql should be inserted. + The string containing sql to insert. + This SqlStringBuilder + + + + Insert a Parameter into the SqlStringBuilder at the specified index. + + The zero-based index at which the Parameter should be inserted. + The Parameter to insert. + This SqlStringBuilder + + + + Removes the string or Parameter at the specified index. + + The zero-based index of the item to remove. + This SqlStringBuilder + + + + Converts the mutable SqlStringBuilder into the immutable SqlString. + + The SqlString that was built. + + + + Gets the number of SqlParts in this SqlStringBuilder. + + + The number of SqlParts in this SqlStringBuilder. + + + + + Gets or Sets the element at the index + + Returns a string or Parameter. + + + + + A class that builds an UPDATE sql statement. + + + + + Add a column with a specific value to the UPDATE sql + + The name of the Column to add. + The value to set for the column. + The NHibernateType to use to convert the value to a sql string. + The SqlUpdateBuilder. + + + + Add a column with a specific value to the UPDATE sql + + The name of the Column to add. + A valid sql string to set as the value of the column. + The SqlUpdateBuilder. + + + + Adds columns with a specific value to the UPDATE sql + + The names of the Columns to add. + A valid sql string to set as the value of the column. This value is assigned to each column. + The SqlUpdateBuilder. + + + + Adds the Property's columns to the UPDATE sql + + An array of the column names for the Property + The IType of the property. + The SqlUpdateBuilder. + + + + Adds the Property's updatable columns to the UPDATE sql + + An array of the column names for the Property + An array of updatable column flags. If this array is null, all supplied columns are considered updatable. + The IType of the property. + The SqlUpdateBuilder. + + + + Sets the IdentityColumn for the UPDATE sql to use. + + An array of the column names for the Property + The IType of the Identity Property. + The SqlUpdateBuilder. + + + + Sets the VersionColumn for the UPDATE sql to use. + + An array of the column names for the Property + The IVersionType of the Version Property. + The SqlUpdateBuilder. + + + + Adds the columns for the Type to the WhereFragment + + The names of the columns to add. + The IType of the property. + The operator to put between the column name and value. + The SqlUpdateBuilder + + + + Adds a string to the WhereFragement + + A well formed sql string with no parameters. + The SqlUpdateBuilder + + + + + + + Given an SQL SELECT statement, parse it to extract clauses starting with + FROM, up to and not including ORDER BY (known collectively + as a subselect clause). + + + + + Contains the subselect clause as it is being built. + + + + + Initializes a new instance of the class. + + The parts of an to extract the subselect clause from. + + + + Looks for a FROM clause in the + and adds the clause to the result if found. + + A or a . + if the part contained a FROM clause, + otherwise. + + + + Returns the subselect clause of the statement + being processed. + + An containing + the subselect clause of the original SELECT + statement. + + + + Allows us to construct SQL WHERE fragments + + + + + Describes the details of a with the + information required to to generate an . + + + This can store the length of the string that the can hold. + If no value is provided for the length then the Driver is responsible for + setting the properties on the correctly. + + + + + This is the base class that adds information to the + for the and + to use. + + +

+ The uses the SqlType to get enough + information to create an . +

+

+ The use the SqlType to convert the + to the appropriate sql type for SchemaExport. +

+
+
+ + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The length of the string the should hold. + + + + Describes the details of a with the + information required to generate an . + + + This can store the length of the string that the can hold. + If no value is provided for the length then the Driver is responsible for + setting the properties on the correctly. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The length of the string the should hold. + + + + Describes the details of a that is stored in + a BLOB column with the information required to generate + an . + + +

+ This can store the length of the binary data that the can hold. + If no value is provided for the length then the Driver is responsible for + setting the properties on the correctly. +

+

+ This is only needed by DataProviders (SqlClient) that need to specify a Size for the + IDbDataParameter. Most DataProvider(Oralce) don't need to set the Size so a + BinarySqlType would work just fine. +

+
+
+ + + Describes the details of a with the + information required to to generate an . + + + This can store the binary data that the can hold. + If no value is provided for the length then the Driver is responsible for + setting the properties on the correctly. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The length of the binary data the should hold + + + + Initializes a new instance of the class. + + + + + SqlTypeFactory provides Singleton access to the SqlTypes. + + + + + Describes the details of a that is stored in + a CLOB column with the information required to generate + an . + + +

+ This can store the length of the binary data that the can hold. + If no value is provided for the length then the Driver is responsible for + setting the properties on the correctly. +

+

+ This is only needed by DataProviders (SqlClient) that need to specify a Size for the + IDbDataParameter. Most DataProvider(Oralce) don't need to set the Size so a + StringSqlType would work just fine. +

+
+
+ + + Describes the details of a with the + information required to generate an . + + + This can store the length of the string that the can hold. + If no value is provided for the length then the Driver is responsible for + setting the properties on the correctly. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The length of the string the should hold. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The length of the string the should hold. + + + + Describes the details of a with the + information required to to generate an . + + + This can store the length of the string that the can hold. + If no value is provided for the length then the Driver is responsible for + setting the properties on the correctly. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The length of the string the should hold. + + + + Statistics for a particular "category" (a named entity, + collection role, second level cache region or query). + + + + Collection related statistics + + + Entity related statistics + + + + Information about the first-level (session) cache for a particular session instance + + + + Get the number of entity instances associated with the session + + + Get the number of collection instances associated with the session + + + Get the set of all EntityKeys. + + + Get the set of all CollectionKeys. + + + + Statistics for a particular SessionFactory. + Beware of milliseconds metrics, they are depdendent of the JVM precision: + you may then encounter a 10 ms approximation dending on your OS platform. + Please refer to the JVM documentation for more information. + + + + Reset all statistics + + + Find entity statistics per name + entity name + EntityStatistics object + + + Get collection statistics per role + collection role + CollectionStatistics + + + Second level cache statistics per region + region name + SecondLevelCacheStatistics + + + Query statistics from query string (HQL or SQL) + query string + QueryStatistics + + + log in info level the main statistics + + + Global number of entity deletes + + + Global number of entity inserts + + + Global number of entity loads + + + Global number of entity fetchs + + + Global number of entity updates + + + Global number of executed queries + + + The time in milliseconds of the slowest query. + + + The query string for the slowest query. + + + The global number of cached queries successfully retrieved from cache + + + The global number of cached queries *not* found in cache + + + The global number of cacheable queries put in cache + + + Get the global number of flush executed by sessions (either implicit or explicit) + + + + Get the global number of connections asked by the sessions + (the actual number of connections used may be much smaller depending + whether you use a connection pool or not) + + + + Global number of cacheable entities/collections successfully retrieved from the cache + + + Global number of cacheable entities/collections not found in the cache and loaded from the database. + + + Global number of cacheable entities/collections put in the cache + + + Global number of sessions closed + + + Global number of sessions opened + + + Global number of collections loaded + + + Global number of collections fetched + + + Global number of collections updated + + + Global number of collections removed + + + Global number of collections recreated + + + Start time + + + Enable/Disable statistics logs (this is a dynamic parameter) + + + All executed query strings + + + The names of all entities + + + The names of all collection roles + + + Get all second-level cache region names + + + The number of transactions we know to have been successful + + + The number of transactions we know to have completed + + + The number of prepared statements that were acquired + + + The number of prepared statements that were released + + + The number of StaleObjectStateExceptions that occurred + + + Statistics SPI for the NHibernate core + + + Query statistics (HQL and SQL) + Note that for a cached query, the cache miss is equals to the db count + + + Add statistics report of a DB query + rows count returned + time taken + + + Second level cache statistics of a specific region + + + + Not ported yet + + + + + Not ported yet + + + + + Not ported yet + + + + + Not ported yet + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Contract for delegates responsible for managing connection used by the + hbm2ddl tools. + + + + + Prepare the helper for use. + + + + + Get a reference to the connection we are using. + + + + + Release any resources held by this helper. + + + + + Executes a query and returns a datatable. The parameters array is used + in the following fashion ExecuteQuery("select @id", "id", 15); + + + + + A implementation based on an internally + built and managed . + + + + + Generates ddl to export table schema for a configured Configuration to the database + + + This Class can be used directly or the command line wrapper NHibernate.Tool.hbm2ddl.exe can be + used when a dll can not be directly used. + + + + + Create a schema exported for a given Configuration + + The NHibernate Configuration to generate the schema from. + + + + Create a schema exporter for the given Configuration, with the given + database connection properties + + The NHibernate Configuration to generate the schema from. + The Properties to use when connecting to the Database. + + + + Set the output filename. The generated script will be written to this file + + The name of the file to output the ddl to. + The SchemaExport object. + + + + Set the end of statement delimiter + + The end of statement delimiter. + The SchemaExport object. + + + + Run the schema creation script + + if the ddl should be outputted in the Console. + if the ddl should be executed against the Database. + + This is a convenience method that calls and sets + the justDrop parameter to false and the format parameter to true. + + + + + Run the drop schema script + + if the ddl should be outputted in the Console. + if the ddl should be executed against the Database. + + This is a convenience method that calls and sets + the justDrop and format parameter to true. + + + + + Executes the Export of the Schema in the given connection + + if the ddl should be outputted in the Console. + if the ddl should be executed against the Database. + if only the ddl to drop the Database objects should be executed. + if the ddl should be nicely formatted instead of one statement per line. + + The connection to use when executing the commands when export is . + Must be an opened connection. The method doesn't close the connection. + + The writer used to output the generated schema + + This method allows for both the drop and create ddl script to be executed. + This overload is provided mainly to enable use of in memory databases. + It does NOT close the given connection! + + + + + Executes the Export of the Schema. + + if the ddl should be outputted in the Console. + if the ddl should be executed against the Database. + if only the ddl to drop the Database objects should be executed. + if the ddl should be nicely formatted instead of one statement per line. + + This method allows for both the drop and create ddl script to be executed. + + + + + Format an SQL statement using simple rules + + The string containing the sql to format. + A string that contains formatted sql. + + The simple rules to used when formatting are: + + + Insert a newline after each comma + + + Indent three spaces after each inserted newline + + + + If the statement contains single/double quotes return unchanged because + it is too complex and could be broken by simple formatting. + + + + + + + + Execute the schema updates + + + + + Returns a List of all Exceptions which occured during the export. + + + + + + A implementation based on an explicitly supplied + connection. + + + + + A implementation based on a provided + . Essentially, ensures that the connection + gets cleaned up, but that the provider itself remains usable since it + was externally provided to us. + + + + + An abstract factory for ITransaction instances. + + + + + Configure from the given properties + + + + + + Create a new transaction and return it without starting it. + + + + + Wraps an ADO.NET to implement + the interface. + + + + + Allows the application to define units of work, while maintaining abstraction from the + underlying transaction implementation + + + A transaction is associated with a ISession and is usually instanciated by a call to + ISession.BeginTransaction(). A single session might span multiple transactions since + the notion of a session (a conversation between the application and the datastore) is of + coarser granularity than the notion of a transaction. However, it is intended that there be + at most one uncommitted ITransaction associated with a particular ISession + at a time. Implementors are not intended to be threadsafe. + + + + + Begin the transaction with the default isolation level. + + + + + Begin the transaction with the specified isolation level. + + Isolation level of the transaction + + + + Flush the associated ISession and end the unit of work. + + + This method will commit the underlying transaction if and only if the transaction + was initiated by this object. + + + + + Force the underlying transaction to roll back. + + + + + Enlist the in the current Transaction. + + The to enlist. + + It is okay for this to be a no op implementation. + + + + + Is the transaction in progress + + + + + Was the transaction rolled back or set to rollback only? + + + + + Was the transaction successfully committed? + + + This method could return even after successful invocation of Commit() + + + + + Initializes a new instance of the class. + + The the Transaction is for. + + + + Enlist the in the current . + + The to enlist in this Transaction. + + + This takes care of making sure the 's Transaction property + contains the correct or if there is no + Transaction for the ISession - ie BeginTransaction() not called. + + + This method may be called even when the transaction is disposed. + + + + + + Begins the on the + used by the . + + + Thrown if there is any problems encountered while trying to create + the . + + + + + Commits the by flushing the + and committing the . + + + Thrown if there is any exception while trying to call Commit() on + the underlying . + + + + + Rolls back the by calling the method Rollback + on the underlying . + + + Thrown if there is any exception while trying to call Rollback() on + the underlying . + + + + + A flag to indicate if Disose() has been called. + + + + + Finalizer that ensures the object is correctly disposed of. + + + + + Takes care of freeing the managed and unmanaged resources that + this class is responsible for. + + + + + Takes care of freeing the managed and unmanaged resources that + this class is responsible for. + + Indicates if this AdoTransaction is being Disposed of or Finalized. + + If this AdoTransaction is being Finalized (isDisposing==false) then make sure not + to call any methods that could potentially bring this AdoTransaction back to life. + + + + + Gets a indicating if the transaction was rolled back. + + + if the had Rollback called + without any exceptions. + + + + + Gets a indicating if the transaction was committed. + + + if the had Commit called + without any exceptions. + + + + + Implementors define a strategy for transforming criteria query + results into the actual application-visible query result list. + + + + + + + + + + + + + + + + + + + + + Result transformer that allows to transform a result to + a user specified class which will be populated via setter + methods or fields matching the alias names. + + + + IList resultWithAliasedBean = s.CreateCriteria(typeof(Enrollment)) + .CreateAlias("Student", "st") + .CreateAlias("Course", "co") + .SetProjection( Projections.ProjectionList() + .Add( Projections.Property("co.Description"), "CourseDescription" ) + ) + .SetResultTransformer( new AliasToBeanResultTransformer(typeof(StudentDTO)) ) + .List(); + + StudentDTO dto = (StudentDTO)resultWithAliasedBean[0]; + + + + + + Each row of results is a map () from alias to values/entities + + + + + Creates a resulttransformer that will inject aliased values into instances + of via property methods or fields. + + + + Support for tuplizers relating to components. + + + + Defines further responsibilities reagarding tuplization based on + a mapped components. + + + ComponentTuplizer implementations should have the following constructor signature: + (org.hibernate.mapping.Component) + + + + + A tuplizer defines the contract for things which know how to manage + a particular representation of a piece of data, given that + representation's (the entity-mode + essentially defining which representation). + + + If that given piece of data is thought of as a data structure, then a tuplizer + is the thing which knows how to: + + create such a data structure appropriately + extract values from and inject values into such a data structure + + + For example, a given piece of data might be represented as a POCO class. + Here, it's representation and entity-mode is POCO. Well a tuplizer for POCO + entity-modes would know how to: + + create the data structure by calling the POCO's constructor + extract and inject values through getters/setter, or by direct field access, etc + + + That same piece of data might also be represented as a DOM structure, using + the tuplizer associated with the XML entity-mode, which would generate instances + of as the data structure and know how to access the + values as either nested s or as s. + + + + + + + Extract the current values contained on the given entity. + + The entity from which to extract values. + The current property values. + HibernateException + + + Inject the given values into the given entity. + The entity. + The values to be injected. + + + Extract the value of a particular property from the given entity. + The entity from which to extract the property value. + The index of the property for which to extract the value. + The current value of the given property on the given entity. + + + Generate a new, empty entity. + The new, empty entity instance. + + + + Is the given object considered an instance of the the entity (acconting + for entity-mode) managed by this tuplizer. + + The object to be checked. + True if the object is considered as an instance of this entity within the given mode. + + + + Return the pojo class managed by this tuplizer. + + The persistent class. + + Need to determine how to best handle this for the Tuplizers for EntityModes + other than POCO. + + + + Retreive the current value of the parent property. + + The component instance from which to extract the parent property value. + + The current value of the parent property. + + + Set the value of the parent property. + The component instance on which to set the parent. + The parent to be set on the comonent. + The current session factory. + + + Does the component managed by this tuuplizer contain a parent property? + True if the component does contain a parent property; false otherwise. + + + This method does not populate the component parent + + + + Handles mapping s to ComponentTuplizers. +

+ Most of the handling is really in the super class; here we just create + the tuplizers and add them to the superclass +

+
+ + Centralizes handling of to mappings. + + + Given a supposed instance of an entity/component, guess its entity mode. + The supposed instance of the entity/component. + The guessed entity mode. + + + + Locate the contained tuplizer responsible for the given entity-mode. If + no such tuplizer is defined on this mapping, then return null. + + The entity-mode for which the caller wants a tuplizer. + The tuplizer, or null if not found. + + + Locate the tuplizer contained within this mapping which is responsible + for the given entity-mode. If no such tuplizer is defined on this + mapping, then an exception is thrown. + + + The entity-mode for which the caller wants a tuplizer. + + The tuplizer. + + HibernateException Unable to locate the requested tuplizer. + + + Centralizes metamodel information about a component. + + + + A specific to the dynamic-map entity mode. + + + + + A specific to the POCO entity mode. + + + + Support for tuplizers relating to entities. + + + + Defines further responsibilities reagarding tuplization based on a mapped entity. + + + EntityTuplizer implementations should have the following constructor signature: + (, ) + + + + Create an entity instance initialized with the given identifier. + The identifier value for the entity to be instantiated. + The instantiated entity. + + + Extract the identifier value from the given entity. + The entity from which to extract the identifier value. + The identifier value. + + + + Inject the identifier value into the given entity. + + The entity to inject with the identifier value. + The value to be injected as the identifier. + Has no effect if the entity does not define an identifier property + + + + Inject the given identifier and version into the entity, in order to + "roll back" to their original values. + + + The identifier value to inject into the entity. + The version value to inject into the entity. + + + Extract the value of the version property from the given entity. + The entity from which to extract the version value. + The value of the version property, or null if not versioned. + + + Inject the value of a particular property. + The entity into which to inject the value. + The property's index. + The property value to inject. + + + Inject the value of a particular property. + The entity into which to inject the value. + The name of the property. + The property value to inject. + + + Extract the values of the insertable properties of the entity (including backrefs) + The entity from which to extract. + a map of instances being merged to merged instances + The session in which the resuest is being made. + The insertable property values. + + + Extract the value of a particular property from the given entity. + The entity from which to extract the property value. + The name of the property for which to extract the value. + The current value of the given property on the given entity. + + + Called just after the entities properties have been initialized. + The entity being initialized. + Are defined lazy properties currently unfecthed + The session initializing this entity. + + + + Generates an appropriate proxy representation of this entity for this entity-mode. + + The id of the instance for which to generate a proxy. + The session to which the proxy should be bound. + The generate proxies. + + + Does the given entity instance have any currently uninitialized lazy properties? + The entity to be check for uninitialized lazy properties. + True if uninitialized lazy properties were found; false otherwise. + + + + Does the class managed by this tuplizer implement + the interface. + + True if the ILifecycle interface is implemented; false otherwise. + + + + Does the class managed by this tuplizer implement + the interface. + + True if the IValidatable interface is implemented; false otherwise. + + + Returns the java class to which generated proxies will be typed. + The .NET class to which generated proxies will be typed + + + Is it an instrumented POCO? + + + Does this entity, for this mode, present a possibility for proxying? + True if this tuplizer can generate proxies for this entity. + + + Constructs a new AbstractEntityTuplizer instance. + The "interpreted" information relating to the mapped entity. + The parsed "raw" mapping data relating to the given entity. + + + Build an appropriate Getter for the given property. + The property to be accessed via the built Getter. + The entity information regarding the mapped entity owning this property. + An appropriate Getter instance. + + + Build an appropriate Setter for the given property. + The property to be accessed via the built Setter. + The entity information regarding the mapped entity owning this property. + An appropriate Setter instance. + + + Build an appropriate Instantiator for the given mapped entity. + The mapping information regarding the mapped entity. + An appropriate Instantiator instance. + + + Build an appropriate ProxyFactory for the given mapped entity. + The mapping information regarding the mapped entity. + The constructed Getter relating to the entity's id property. + The constructed Setter relating to the entity's id property. + An appropriate ProxyFactory instance. + + + Extract a component property value. + The component property types. + The component instance itself. + The property path for the property to be extracted. + The property value extracted. + + + Return the entity-mode handled by this tuplizer instance. + + + Retreives the defined entity-name for the tuplized entity. + + + + Retreives the defined entity-names for any subclasses defined for this entity. + + + + + Handles mapping s to s. + + + Most of the handling is really in the super class; here we just create + the tuplizers and add them to the superclass + + + + + Instantiates a EntityEntityModeToTuplizerMapping based on the given + entity mapping and metamodel definitions. + + The entity mapping definition. + The entity metamodel definition. + + + An specific to the POCO entity mode. + + + Contract for implementors responsible for instantiating entity/component instances. + + + Perform the requested entity instantiation. + The id of the entity to be instantiated. + An appropriately instantiated entity. + This form is never called for component instantiation, only entity instantiation. + + + Perform the requested instantiation. + The instantiated data structure. + + + + Performs check to see if the given object is an instance of the entity + or component which this Instantiator instantiates. + + The object to be checked. + True is the object does respresent an instance of the underlying entity/component. + + + + Represents a defined entity identifier property within the Hibernate + runtime-metamodel. + + + Author: Steve Ebersole + + + + + Defines the basic contract of a Property within the runtime metamodel. + + + + + Constructor for Property instances. + + The name by which the property can be referenced within its owner. + The node name to use for XML-based representation of this property. + The Hibernate Type of this property. + + + + Construct a non-virtual identifier property. + + The name of the property representing the identifier within + its owning entity. + The node name to use for XML-based representation of this + property. + The Hibernate Type for the identifier property. + Is this an embedded identifier. + The value which, if found as the value on the identifier + property, represents new (i.e., un-saved) instances of the owning entity. + The generator to use for id value generation. + + + + Construct a virtual IdentifierProperty. + + The Hibernate Type for the identifier property. + Is this an embedded identifier. + The value which, if found as the value on the identifier + property, represents new (i.e., un-saved) instances of the owning entity. + The generator to use for id value generation. + + + + Defines a POCO-based instantiator for use from the tuplizers. + + + + Responsible for generation of runtime metamodel representations. + Makes distinction between identifier, version, and other (standard) properties. + + + Author: Steve Ebersole + + + + + Generates an IdentifierProperty representation of the for a given entity mapping. + + The mapping definition of the entity. + The identifier value generator to use for this identifier. + The appropriate IdentifierProperty definition. + + + + Generates a VersionProperty representation for an entity mapping given its + version mapping Property. + + The version mapping Property. + Is property lazy loading currently available. + The appropriate VersionProperty definition. + + + + Generate a "standard" (i.e., non-identifier and non-version) based on the given + mapped property. + + The mapped property. + Is property lazy loading currently available. + The appropriate StandardProperty definition. + + + + Represents a basic property within the Hibernate runtime-metamodel. + + + Author: Steve Ebersole + + + + + Constructs StandardProperty instances. + + The name by which the property can be referenced within + its owner. + The node name to use for XML-based representation of this + property. + The Hibernate Type of this property. + Should this property be handled lazily? + Is this property an insertable value? + Is this property an updateable value? + Is this property generated in the database on insert? + Is this property generated in the database on update? + Is this property a nullable value? + Is this property a checkable value? + Is this property a versionable value? + The cascade style for this property's value. + Any fetch mode defined for this property + + + + Represents a version property within the Hibernate runtime-metamodel. + + + Author: Steve Ebersole + + + + + Constructs VersionProperty instances. + + The name by which the property can be referenced within + its owner. + The node name to use for XML-based representation of this + property. + The Hibernate Type of this property. + Should this property be handled lazily? + Is this property an insertable value? + Is this property an updateable value? + Is this property generated in the database on insert? + Is this property generated in the database on update? + Is this property a nullable value? + Is this property a checkable value? + Is this property a versionable value? + The cascade style for this property's value. + The value which, if found as the value of + this (i.e., the version) property, represents new (i.e., un-saved) + instances of the owning entity. + + + Logic to bind stream of byte into a VARBINARY + + + + Superclass for mutable nullable types. + + + + + Superclass of single-column nullable types. + + + Maps the Property to a single column that is capable of storing nulls in it. If a .net Struct is + used it will be created with its unitialized value and then on Update the uninitialized value of + the Struct will be written to the column - not . + + + + + The base implementation of the interface. + Mapping of the built in Type hierarchy. + + + + + Defines a mapping from a .NET to a SQL datatype. + This interface is intended to be implemented by applications that need custom types. + + Implementors should usually be immutable and MUST definately be threadsafe. + + + + + When implemented by a class, returns the SqlTypes for the columns mapped by this IType. + The that uses this IType.An array of s. + + + + When implemented by a class, returns how many columns are used to persist this type. + The that uses this IType.The number of columns this IType spans.MappingException + + + + When implemented by a class, should the parent be considered dirty, + given both the old and current field or element value? + The old valueThe current valueThe true if the field is dirty + + + + When implemented by a class, gets an instance of the object mapped by + this IType from the . + The that contains the values + The names of the columns in the that contain the + value to populate the IType with. + The object mapped by this IType. + Implementors should handle possibility of null values. + + + + + When implemented by a class, gets an instance of the object + mapped by this IType from the . + The that contains the valuesThe name of the column in the that contains the + value to populate the IType with.The object mapped by this IType. + Implementations should handle possibility of null values. + This method might be called if the IType is known to be a single-column type. + + + + + When implemented by a class, puts the value/values from the mapped + class into the . + The to put the values into.The object that contains the values.The index of the to start writing the values to.Indicates which columns are to be set. + Implementors should handle possibility of null values. + A multi-column type should be written to parameters starting from . + + + + + When implemented by a class, puts the value/values from the mapped + class into the . + + The to put the values into. + The object that contains the values. + The index of the to start writing the values to. + + Implementors should handle possibility of null values. + A multi-column type should be written to parameters starting from . + + + + + When implemented by a class, a representation of the value to be + embedded in an XML element + The object that contains the values.An Xml formatted string. + + + + When implemented by a class, returns a deep copy of the persistent + state, stopping at entities and at collections. + A Collection element or Entity fieldThe entityMode.The session factory.A deep copy of the object. + + + + When implemented by a class, retrives an instance of the mapped class, + or the identifier of an entity or collection from a . + The that contains the values. + The names of the columns in the that contain the + value to populate the IType with. + the sessionThe parent EntityAn identifier or actual object mapped by this IType. + + This is useful for 2-phase property initialization - the second phase is a call to + ResolveIdentifier() + + + Most implementors of this method will just pass the call to NullSafeGet(). + + + + + + When implemented by a class, maps identifiers to Entities or Collections. + An identifier or value returned by Hydrate()The sessionThe parent EntityThe Entity or Collection referenced by this Identifier. + This is the second phase of 2-phase property initialization. + + + + + Given a hydrated, but unresolved value, return a value that may be used to + reconstruct property-ref associations. + + + + + + + + During merge, replace the existing (target) value in the entity we are merging to + with a new (original) value from the detached entity we are merging. For immutable + objects, or null values, it is safe to simply return the first parameter. For + mutable objects, it is safe to return a copy of the first parameter. For objects + with component values, it might make sense to recursively replace component values. + + the value from the detached entity being merged + the value in the managed entity + + + + + the value to be merged + + + + Compare two instances of the class mapped by this type for persistence + "equality" - equality of persistent state - taking a shortcut for + entity references. + + + + + boolean + + + + Compare two instances of the class mapped by this type for persistence + "equality" - equality of persistent state. + + + + + boolean + + + + Compare two instances of the class mapped by this type for persistence + "equality" - equality of persistent state. + + + + + + boolean + + + Get a hashcode, consistent with persistence "equality" + + + + + Get a hashcode, consistent with persistence "equality" + + + + + + compare two instances of the type + + + + + + Get the type of a semi-resolved value. + + + A representation of the value to be embedded in an XML element. + + + + + + Parse the XML representation of an instance. + + + an instance of the type + + + + Given an instance of the type, return an array of boolean, indicating + which mapped columns would be null. + + an instance of the type + + + + + When implemented by a class, gets the abbreviated name of the type. + The NHibernate type name. + + + + When implemented by a class, gets the returned + by the NullSafeGet() methods. + + The from the .NET framework. + + This is used to establish the class of an array of this Itype + + + + + When implemented by a class, gets the value indicating if the objects + of this IType are mutable. + true if the objects mapped by this IType are mutable. + With respect to the referencing object... + Entities and Collections are considered immutable because they manage their own internal state. + + + + + When implemented by a class, gets a value indicating if the implementor is castable to an an + true if this is an AssociationThis does not necessarily imply that the type actually represents an association. + + + + When implemented by a class, gets a value indicating if the implementor is a collection type + true if this is a . + + + + When implemented by a class, gets a value indicating if the implementor + is an . + true if this is an + If true, the implementation must be castable to . + A component type may own collections or associations and hence must provide certain extra functionality. + + + + + When implemented by a class, gets a value indicating if the implementor + extends + true if this is an + + + + + + + Disassembles the object into a cacheable representation. + + The value to disassemble. + The is not used by this method. + optional parent entity object (needed for collections) + The disassembled, deep cloned state of the object + + This method calls DeepCopy if the value is not null. + + + + + Reconstructs the object from its cached "disassembled" state. + + The disassembled state from the cache + The is not used by this method. + The parent Entity object is not used by this method + The assembled object. + + This method calls DeepCopy if the value is not null. + + + + + Should the parent be considered dirty, given both the old and current + field or element value? + + The old value + The current value + The is not used by this method. + true if the field is dirty + This method uses IType.Equals(object, object) to determine the value of IsDirty. + + + + Retrives an instance of the mapped class, or the identifier of an entity + or collection from a . + + The that contains the values. + + The names of the columns in the that contain the + value to populate the IType with. + + the session + The parent Entity + An identifier or actual object mapped by this IType. + + This method uses the IType.NullSafeGet(IDataReader, string[], ISessionImplementor, object) method + to Hydrate this . + + + + + Maps identifiers to Entities or Collections. + + An identifier or value returned by Hydrate() + The is not used by this method. + The parent Entity is not used by this method. + The value. + + There is nothing done in this method other than return the value parameter passed in. + + + + + Says whether the value has been modified + + + + + When implemented by a class, returns a deep copy of the persistent + state, stopping at entities and at collections. + A Collection element or Entity fieldThe entityMode.The session factory.A deep copy of the object. + + + + When implemented by a class, returns the SqlTypes for the columns mapped by this IType. + The that uses this IType.An array of s. + + + + When implemented by a class, returns how many columns are used to persist this type. + The that uses this IType.The number of columns this IType spans.MappingException + + + + + + + + + + When implemented by a class, puts the value/values from the mapped + class into the . + The to put the values into.The object that contains the values.The index of the to start writing the values to.Indicates which columns are to be set. + Implementors should handle possibility of null values. + A multi-column type should be written to parameters starting from . + + + + + When implemented by a class, puts the value/values from the mapped + class into the . + + The to put the values into. + The object that contains the values. + The index of the to start writing the values to. + + Implementors should handle possibility of null values. + A multi-column type should be written to parameters starting from . + + + + + When implemented by a class, a representation of the value to be + embedded in an XML element + The object that contains the values.An Xml formatted string. + + + + Gets a value indicating if the is an . + + false - by default an is not an . + + + + Gets a value indicating if the is a . + + false - by default an is not a . + + + + Gets a value indicating if the is an . + + false - by default an is not an . + + + + Gets a value indicating if the is a . + + false - by default an is not a . + + + + Gets a value indicating if the implementation is an "object" type + + false - by default an is not a "object" type. + + + + When implemented by a class, gets the value indicating if the objects + of this IType are mutable. + true if the objects mapped by this IType are mutable. + With respect to the referencing object... + Entities and Collections are considered immutable because they manage their own internal state. + + + + + When implemented by a class, gets the abbreviated name of the type. + The NHibernate type name. + + + + When implemented by a class, gets the returned + by the NullSafeGet() methods. + + The from the .NET framework. + + This is used to establish the class of an array of this Itype + + + + + Initialize a new instance of the NullableType class using a + . + + The underlying . + This is used when the Property is mapped to a single column. + + + + When implemented by a class, put the value from the mapped + Property into to the . + + The to put the value into. + The object that contains the value. + The index of the to start writing the values to. + + Implementors do not need to handle possibility of null values because this will + only be called from after + it has checked for nulls. + + + + + When implemented by a class, gets the object in the + for the Property. + + The that contains the value. + The index of the field to get the value from. + An object with the value from the database. + + + + When implemented by a class, gets the object in the + for the Property. + + The that contains the value. + The name of the field to get the value from. + An object with the value from the database. + + Most implementors just call the + overload of this method. + + + + + A representation of the value to be embedded in an XML element + + The object that contains the values. + + An Xml formatted string. + + + + When implemented by a class, a representation of the value to be + embedded in an XML element + The object that contains the values.An Xml formatted string. + + + This implementation forwards the call to if the parameter + value is not null. + + + It has been "sealed" because the Types inheriting from + do not need and should not override this method. All of their implementation + should be in . + + + + + + Parse the XML representation of an instance + + XML string to parse, guaranteed to be non-empty + + + + + When implemented by a class, puts the value/values from the mapped + class into the . + + The to put the values into. + The object that contains the values. + The index of the to start writing the values to. + + Implementors should handle possibility of null values. + A multi-column type should be written to parameters starting from . + + + + This implemenation forwards the call to . + + + It has been "sealed" because the Types inheriting from + do not need to and should not override this method. All of their implementation + should be in . + + + + + + Puts the value from the mapped class into the . + + The to put the values into. + The object that contains the values. + The index of the to write the value to. + + + This method checks to see if value is null, if it is then the value of + is written to the . + + + If the value is not null, then the method + is called and that method is responsible for setting the value. + + + + + + When implemented by a class, gets an instance of the object mapped by + this IType from the . + The that contains the values + The names of the columns in the that contain the + value to populate the IType with. + The object mapped by this IType. + Implementors should handle possibility of null values. + + + This has been sealed because no other class should override it. This + method calls for a single value. + It only takes the first name from the string[] names parameter - that is a + safe thing to do because a Nullable Type only has one field. + + + + + Extracts the values of the fields from the DataReader + + The DataReader positioned on the correct record + An array of field names. + The value off the field from the DataReader + + In this class this just ends up passing the first name to the NullSafeGet method + that takes a string, not a string[]. + + I don't know why this method is in here - it doesn't look like anybody that inherits + from NullableType overrides this... + + TODO: determine if this is needed + + + + + Gets the value of the field from the . + + The positioned on the correct record. + The name of the field to get the value from. + The value of the field. + + + This method checks to see if value is null, if it is then the null is returned + from this method. + + + If the value is not null, then the method + is called and that method is responsible for retreiving the value. + + + + + + When implemented by a class, gets an instance of the object + mapped by this IType from the . + The that contains the valuesThe name of the column in the that contains the + value to populate the IType with.The object mapped by this IType. + Implementations should handle possibility of null values. + This method might be called if the IType is known to be a single-column type. + + + + This implemenation forwards the call to . + + + It has been "sealed" because the Types inheriting from + do not need to and should not override this method. All of their implementation + should be in . + + + + + + When implemented by a class, returns the SqlTypes for the columns mapped by this IType. + The that uses this IType.An array of s. + + + This implemenation forwards the call to . + + + It has been "sealed" because the Types inheriting from + do not need to and should not override this method because they map to a single + column. All of their implementation should be in . + + + + + + Returns the number of columns spanned by this + + A always returns 1. + + This has the hard coding of 1 in there because, by definition of this class, + a NullableType can only map to one column in a table. + + + + + Determines whether the specified is equal to this + . + + The to compare with this NullableType. + true if the SqlType and Name properties are the same. + + + + Serves as a hash function for the , + suitable for use in hashing algorithms and data structures like a hash table. + + + A hash code that is based on the 's + hash code and the 's hash code. + + + + Gets the underlying for + the column mapped by this . + + The underlying . + + This implementation should be suitable for all subclasses unless they need to + do some special things to get the value. There are no built in s + that override this Property. + + + + + Initialize a new instance of the MutableType class using a + . + + The underlying . + + + + Gets the value indicating if this IType is mutable. + + true - a is mutable. + + This has been "sealed" because any subclasses are expected to be mutable. If + the type is immutable then they should inherit from . + + + + + An that may be used to version data. + + + + + When implemented by a class, increments the version. + + The current version + The current session, if available. + an instance of the that has been incremented. + + + + When implemented by a class, gets an initial version. + + The current session, if available. + An instance of the type. + + + + Are the two version values considered equal? + + One value to check. + The other value to check. + true if the values are equal, false otherwise. + + + + Get a comparator for the version numbers + + + + Convert the byte[] into the expected object type + + + Convert the object into the internal byte[] representation + + + + Common base class for and . + + + + + Superclass of types. + + + + + Superclass of nullable immutable types. + + + + + Initialize a new instance of the ImmutableType class using a + . + + The underlying . + + + + Gets the value indicating if this IType is mutable. + + false - an is not mutable. + + This has been "sealed" because any subclasses are expected to be immutable. If + the type is mutable then they should inherit from . + + + + + An that may appear as an SQL literal + + + + + When implemented by a class, return a representation + of the value, suitable for embedding in an SQL statement + + The object to convert to a string for the SQL statement. + + A string that containts a well formed SQL Statement. + + + + Initialize a new instance of the PrimitiveType class using a . + + The underlying . + + + + When implemented by a class, return a representation + of the value, suitable for embedding in an SQL statement + + The object to convert to a string for the SQL statement. + + A string that containts a well formed SQL Statement. + + + + A representation of the value to be embedded in an XML element + + The object that contains the values. + + An Xml formatted string. + + This just calls so if there is + a possibility of this PrimitiveType having any characters + that need to be encoded then this method should be overridden. + + + + + An IType that may be used for a discriminator column. + + + This interface contains no new methods but does require that an + that will be used in a discriminator column must implement + both the and interfaces. + + + + + An that may be used as an identifier. + + + + + When implemented by a class, converts the xml string from the + mapping file to the .NET object. + + The value of discriminator-value or unsaved-value attribute. + The string converted to the object. + + This method needs to be able to handle any string. It should not just + call System.Type.Parse without verifying that it is a parsable value + for the System.Type. + + + + + Maps a Property + to a DbType.AnsiStringFixedLength column. + + + + + Maps a Property + to a column. + + + + + + + + Handles "any" mappings and the old deprecated "object" type. + + + The identifierType is any NHibernate IType that can be serailized by default. + For example, you can specify the identifierType as an Int32 or a custom identifier + type that you built. The identifierType matches to one or many columns. + + The metaType maps to a single column. By default it stores the name of the Type + that the Identifier identifies. + + For example, we can store a link to any table. It will have the results + class_name id_col1 + ======================================== + Simple, AssemblyName 5 + DiffClass, AssemblyName 5 + Simple, AssemblyName 4 + + You can also provide you own type that might map the name of the class to a table + with a giant switch statemet or a good naming convention for your class->table. The + data stored might look like + class_name id_col1 + ======================================== + simple_table 5 + diff_table 5 + simple_table 4 + + + + + + Enables other Component-like types to hold collections and have cascades, etc. + + + + + Get the values of the component properties of + a component instance + + + + + Optional Operation + + + + + Optional operation + + + + Get the types of the component properties + + + Get the names of the component properties + + + + Optional operation + + nullability of component properties + + + + An that represents some kind of association between entities. + + + + + Get the "persister" for this association - a class or collection persister + + + + + + Get the entity name of the associated entity + + + + Get the "filtering" SQL fragment that is applied in the + SQL on clause, in addition to the usual join condition. + + + + + When implemented by a class, gets the type of foreign key directionality + of this association. + + The of this association. + + + + Is the primary key of the owning entity table + to be used in the join? + + + + + Get the name of the property in the owning entity + that provides the join key (null if the identifier) + + + + + The name of a unique property of the associated entity + that provides the join key (null if the identifier of + an entity, or key of a collection) + + + + + Do we dirty check this association, even when there are + no columns to be updated. + + + + + + + + + + + + + + + Not really relevant to AnyType, since it cannot be "joined" + + + + + An that maps an collection + to the database. + + + + + The base class for an that maps collections + to the database. + + + + + Initializes a new instance of a class for + a specific role. + + The role the persistent collection is in. + + The name of the property in the + owner object containing the collection ID, or if it is + the primary key. + + + + + + Instantiate an uninitialized collection wrapper or holder. Callers MUST add the holder to the + persistence context! + + The session from which the request is originating. + The underlying collection persister (metadata) + The owner key. + The instantiated collection. + + + + Wrap the naked collection instance in a wrapper, or instantiate a + holder. Callers MUST add the holder to the persistence context! + + The session from which the request is originating. + The bare collection to be wrapped. + + A subclass of that wraps the non NHibernate collection. + + + + + Get the key value from the owning entity instance, usually the identifier, but might be some + other unique key, in the case of property-ref + + + + + Instantiate an empty instance of the "underlying" collection (not a wrapper), + but with the given anticipated size (i.e. accounting for initial capacity + and perhaps load factor). + + A newly instantiated collection to be wrapped. + + + + Get an iterator over the element set of the collection, which may not yet be wrapped + + The collection to be iterated + The session from which the request is originating. + The iterator. + + + + Get an iterator over the element set of the collection in POCO mode + + The collection to be iterated + The iterator. + + + + We always need to dirty check the collection because we sometimes + need to incremement version number of owner and also because of + how assemble/disassemble is implemented for uks + + + + + Initializes a new instance of a class for + a specific role. + + The role the persistent collection is in. + The name of the property in the + owner object containing the collection ID, or if it is + the primary key. + The of the element contained in the array. + + + This creates a bag that is non-generic. + + + + + + + + + + + + + + Wraps a in a . + + The for the collection to be a part of. + The unwrapped array. + + An that wraps the non NHibernate . + + + + + The for the element. + + + + + + + + An that maps an collection + using bag semantics to the database. + + + + + Initializes a new instance of a class for + a specific role. + + The role the persistent collection is in. + The name of the property in the + owner object containing the collection ID, or if it is + the primary key. + + + + + Instantiates a new for the bag. + + The current for the bag. + + + A new . + + + + Wraps an in a NHibernate . + + The for the collection to be a part of. + The unwrapped . + + An that wraps the non NHibernate . + + + + + + + + Maps a System.Byte[] Property to an column that can store a BLOB. + + + This is only needed by DataProviders (SqlClient) that need to specify a Size for the + IDbDataParameter. Most DataProvider(Oralce) don't need to set the Size so a BinaryType + would work just fine. + + + + + BinaryType. + + + + + + + + Maps a Property + to a column. + + + + + Initialize a new instance of the BooleanType + + This is used when the Property is mapped to a native boolean type. + + + + Initialize a new instance of the BooleanType class using a + . + + The underlying . + + This is used when the Property is mapped to a string column + that stores true or false as a string. + + + + + Maps a property + to a column. + + + + + Maps a Property + to a column. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Maps a Property + to a DbType.StringFixedLength column. + + + + + + + + + + + + + + + + + + + + + This method does not populate the component parent + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Summary description for CompositeCustomType. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Maps a Property + to a column. + + + CultureInfoType stores the culture name (not the Culture ID) of the + in the DB. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A custom type for mapping user-written classes that implement + . + + + + + + + Adapts IUserType to the generic IType interface. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Maps a Property to a column that + stores date & time down to the accuracy of a second. + + + This only stores down to a second, so if you are looking for the most accurate + date and time storage your provider can give you use the . + or the + + + + + + + + + + + Maps the Year, Month, and Day of a Property to a + column + + + + + + + + + + + Maps a Property + to a column. + + + + + Maps a Property + to a column. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A reference to an entity class + + + + Constructs the requested entity type mapping. + The name of the associated entity. + + The property-ref name, or null if we + reference the PK of the associated entity. + + Is eager fetching enabled. + Should values of this mapping be embedded in XML modes? + + Is unwrapping of proxies allowed for this association; unwrapping + says to return the "implementation target" of lazy prooxies; typically only possible + with lazy="no-proxy". + + + + Two entities are considered the same when their instances are the same. + One entity instance + Another entity instance + The entity mode. + True if x == y; false otherwise. + + + + Get the identifier value of an instance or proxy. +

+ Intended only for loggin purposes!!! +

+ The object from which to extract the identifier. + The entity persister + The entity mode + The extracted identifier. +
+ + + Converts the id contained in the to an object. + + The that contains the query results. + A string array of column names that contain the id. + The this is occurring in. + The object that this Entity will be a part of. + + An instance of the object or if the identifer was null. + + + + Retrieves the {@link Joinable} defining the associated entity. + The session factory. + The associated joinable + + + + Determine the type of either (1) the identifier if we reference the + associated entity's PK or (2) the unique key to which we refer (i.e. + the property-ref). + + The mappings... + The appropriate type. + + + + The name of the property on the associated entity to which our FK refers + + The mappings... + The appropriate property name. + + + Convenience method to locate the identifier type of the associated entity. + The mappings... + The identifier type + + + Convenience method to locate the identifier type of the associated entity. + The originating session + The identifier type + + + + Resolves the identifier to the actual object. + + + + + Resolve an identifier or unique key value + + + + + + + + The name of the associated entity. + The session factory, for resolution. + The associated entity name. + + + The name of the associated entity. + The associated entity name. + + + + Load an instance by a unique key that is not the primary key. + + The name of the entity to load + The name of the property defining the uniqie key. + The unique key property value. + The originating session. + The loaded entity + + + Explicitly, an entity type is an entity type + True. + + + + This returns the wrong class for an entity with a proxy, or for a named + entity. Theoretically it should return the proxy class, but it doesn't. +

+ The problem here is that we do not necessarily have a ref to the associated + entity persister (nor to the session factory, to look it up) which is really + needed to "do the right thing" here... +

+
+ + + + + + + + + When implemented by a class, gets the type of foreign key directionality + of this association. + + The of this association. + + + + Is the foreign key the primary key of the table? + + + + + Maps a to a + DbType.String. + + + If your database should store the + using the named values in the enum instead of the underlying values + then subclass this . + + + All that needs to be done is to provide a default constructor that + NHibernate can use to create the specific type. For example, if + you had an enum defined as. + + + + public enum MyEnum + { + On, + Off, + Dimmed + } + + + + all that needs to be written for your enum string type is: + + + + public class MyEnumStringType : NHibernate.Type.EnumStringType + { + public MyEnumStringType() + : base( typeof( MyEnum ) ) + { + } + } + + + + The mapping would look like: + + + + ... + <property name="Status" type="MyEnumStringType, AssemblyContaining" /> + ... + + + + The TestFixture that shows the working code can be seen + in NHibernate.Test.TypesTest.EnumStringTypeFixture.cs + , NHibernate.Test.TypesTest.EnumStringClass.cs + , and NHibernate.Test.TypesTest.EnumStringClass.hbm.xml + + + + + + Hardcoding of 255 for the maximum length + of the Enum name that will be saved to the db. + + + 255 because that matches the default length that hbm2ddl will + use to create the column. + + + + + Initializes a new instance of . + + The of the Enum. + + + + Initializes a new instance of . + + The of the Enum. + The length of the string that can be written to the column. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + This appends enumstring - to the beginning of the underlying + enums name so that could still be stored + using the underlying value through the + also. + + + + + Represents directionality of the foreign key constraint + + + + + + + + Should we cascade at this cascade point? + + + + + A foreign key from child to parent + + + + + A foreign key from parent to child + + + + + An that maps an collection + to the database using bag semantics. + + + + + Initializes a new instance of a class for + a specific role. + + The role the persistent collection is in. + The name of the property in the + owner object containing the collection ID, or if it is + the primary key. + + + + Instantiates a new for the bag. + + The current for the bag. + The current for the bag. + + + + + Wraps an in a . + + The for the collection to be a part of. + The unwrapped . + + An that wraps the non NHibernate . + + + + + An that maps an collection + using bag semantics with an identifier to the database. + + + + + Initializes a new instance of a class for + a specific role. + + The role the persistent collection is in. + The name of the property in the + owner object containing the collection ID, or if it is + the primary key. + + + + + Instantiates a new for the identifier bag. + + The current for the identifier bag. + + + + + + + Wraps an in a . + + The for the collection to be a part of. + The unwrapped . + + An that wraps the non NHibernate . + + + + + + + + An that maps an collection + to the database using list semantics. + + + + + An that maps an collection + using list semantics to the database. + + + + + Initializes a new instance of a class for + a specific role. + + The role the persistent collection is in. + The name of the property in the + owner object containing the collection ID, or if it is + the primary key. + + + + + Instantiates a new for the bag. + + The current for the bag. + + + A new . + + + + Wraps an exist in a NHibernate . + + The for the collection to be a part of. + The unwrapped . + + An that wraps the non NHibernate . + + + + + + + + Initializes a new instance of a class for + a specific role. + + The role the persistent collection is in. + The name of the property in the + owner object containing the collection ID, or if it is + the primary key. + + + + Instantiates a new for the list. + + The current for the list. + The current for the list. + + + + + Wraps an in a . + + The for the collection to be a part of. + The unwrapped . + + An that wraps the non NHibernate . + + + + + An that maps an collection + to the database. + + + + + An that maps an collection + to the database. + + + + + Initializes a new instance of a class for + a specific role. + + The role the persistent collection is in. + The name of the property in the + owner object containing the collection ID, or if it is + the primary key. + + + + + Instantiates a new for the map. + + The current for the map. + + + + + + + Wraps an in a . + + The for the collection to be a part of. + The unwrapped . + + An that wraps the non NHibernate . + + + + + + + + Initializes a new instance of a class for + a specific role. + + The role the persistent collection is in. + The name of the property in the + owner object containing the collection ID, or if it is + the primary key. + + + + Instantiates a new for the map. + + The current for the map. + + Not used. + + + + + Wraps an in a . + + The for the collection to be a part of. + The unwrapped . + + An that wraps the + non NHibernate . + + + + + An that maps an collection + to the database. + + + + + An that maps an collection + to the database. + + + + + Initializes a new instance of a class for + a specific role. + + The role the persistent collection is in. + The name of the property in the + owner object containing the collection ID, or if it is + the primary key. + + + + + Instantiates a new for the set. + + The current for the set. + + + + + + + Wraps an in a . + + The for the collection to be a part of. + The unwrapped . + + An that wraps the non NHibernate . + + + + + + + + + + Initializes a new instance of a class for + a specific role. + + The role the persistent collection is in. + The name of the property in the + owner object containing the collection ID, or if it is + the primary key. + + + + Instantiates a new for the set. + + The current for the set. + The current for the set. + + + + + Wraps an in a . + + The for the collection to be a part of. + The unwrapped . + + An that wraps the non NHibernate . + + + + + An that maps a sorted collection + to the database. + + + + + Initializes a new instance of a class for + a specific role. + + The role the persistent collection is in. + The name of the property in the + owner object containing the collection ID, or if it is + the primary key. + The to use to compare + set elements. + + + + Maps a Property + to a column. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Maps a Property + to a column. + + + + + + + + + + + Maps a Property + to a column. + + + + + + + + + + + Maps a Property + to a column. + + + + + + + + + + + A many-to-one association to an entity + + + + + Hydrates the Identifier from . + + The that contains the query results. + A string array of column names to read from. + The this is occuring in. + The object that this Entity will be a part of. + + An instantiated object that used as the identifier of the type. + + + + + A one-to-one association to an entity + + + + + We don't need to dirty check one-to-one because of how + assemble/disassemble is implemented and because a one-to-one + association is never dirty + + + + + A implemented using a collection that maintains + the order in which elements are inserted into it. + + + + + Initializes a new instance of a class. + + The role the persistent collection is in. + + + + + + A implemented using a collection that maintains + the order in which elements are inserted into it. + + + + + Initializes a new instance of a class + + The role the persistent collection is in. + + + + + + PersistentEnumType + + + + + + + + + + + Determines what the NHibernate SqlType should be based on the + values contain in the Enum + + The Enumeration class to get the values from. + The SqlType for this EnumClass + + + + Gets an instance of the Enum + + The underlying value of an item in the Enum. + + An instance of the Enum set to the code value. + + + + + Gets the correct value for the Enum. + + The value to convert. + A boxed version of the code converted to the correct type. + + This handles situations where the DataProvider returns the value of the Enum + from the db in the wrong underlying type. It uses to + convert it to the correct type. + + + + + + + + Maps a Property + to a column. + + + + + + + + + + + Maps an instance of a that has the + to a column. + + + + The SerializableType should be used when you know that Bytes are + not going to be greater than 8,000. + + + The base class is because the data is stored in + a byte[]. The System.Array does not have a nice "equals" method so we must + do a custom implementation. + + + + + + + + + + + + + + + + + + + + + + + Thrown when a property cannot be serialized/deserialized + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The message that describes the error. + + + + Initializes a new instance of the class. + + The message that describes the error. + + The exception that is the cause of the current exception. If the innerException parameter + is not a null reference, the current exception is raised in a catch block that handles + the inner exception. + + + + + Initializes a new instance of the class + with serialized data. + + + The that holds the serialized object + data about the exception being thrown. + + + The that contains contextual information about the source or destination. + + + + + Maps a Property to an + column. + + + Verify through your database's documentation if there is a column type that + matches up with the capabilities of + + + + + + + + + + + Extends the to provide sorting. + + + + + Initializes a new instance of a class for + a specific role using the to do the sorting. + + The role the persistent collection is in. + The name of the property in the + owner object containing the collection ID, or if it is + the primary key. + The to use for the sorting. + + + + + Extends the to provide sorting. + + + + + Initializes a new instance of a class for + a specific role using the to do the sorting. + + The role the persistent collection is in. + The name of the property in the + owner object containing the collection ID, or if it is + the primary key. + The to use for the sorting. + + + + + A one-to-one association that maps to specific formula(s) + instead of the primary key column of the owning entity. + + + + + Maps a Property to an + column that can store a CLOB. + + + This is only needed by DataProviders (SqlClient) that need to specify a Size for the + IDbDataParameter. Most DataProvider(Oralce) don't need to set the Size so a StringType + would work just fine. + + + + + Maps a to a column. + + + + + + + + + + + + + + + + + Maps a Property to an column + that stores the DateTime using the Ticks property. + + + This is the recommended way to "timestamp" a column. + The System.DateTime.Ticks is accurate to 100-nanosecond intervals. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Maps a Property to an column + + + + + + + + + + + + + + + + + + + + + + + + + This is almost the exact same type as the DateTime except it can be used + in the version column, stores it to the accuracy the database supports, + and will default to the value of DateTime.Now if the value is null. + + +

+ The value stored in the database depends on what your data provider is capable + of storing. So there is a possibility that the DateTime you save will not be + the same DateTime you get back when you check DateTime.Equals(DateTime) because + they will have their milliseconds off. +

+

+ For example - SQL Server 2000 is only accurate to 3.33 milliseconds. So if + NHibernate writes a value of 01/01/98 23:59:59.995 to the Prepared Command, MsSql + will store it as 1998-01-01 23:59:59.997. +

+

+ Please review the documentation of your Database server. +

+
+
+ + + Sets the value of this Type in the IDbCommand. + + The IDbCommand to add the Type's value to. + The value of the Type. + The index of the IDataParameter in the IDbCommand. + + No null values will be written to the IDbCommand for this Type. + + + + + Maps a Property to an DateTime column that only stores the + Hours, Minutes, and Seconds of the DateTime as significant. + + + + This defaults the Date to "1753-01-01" - that should not matter because + using this Type indicates that you don't care about the Date portion of the DateTime. + + + A more appropriate choice to store the duration/time is the . + The underlying tends to be handled diffently by different + DataProviders. + + + + + + Maps a to a 1 char column + that stores a 'T'/'F' to indicate true/false. + + + If you are using schema-export to generate your tables then you need + to set the column attributes: length=1 or sql-type="char(1)". + + This needs to be done because in Java's JDBC there is a type for CHAR and + in ADO.NET there is not one specifically for char, so you need to tell schema + export to create a char(1) column. + + + + + + + + + + + + + + + + + Used internally to obtain instances of IType. + + + Applications should use static methods and constants on NHibernate.NHibernateUtil if the default + IType is good enough. For example, the TypeFactory should only be used when the String needs + to have a length of 300 instead of 255. At this point NHibernate.String does not get you the + correct IType. Instead use TypeFactory.GetString(300) and keep a local variable that holds + a reference to the IType. + + + + + + + + Gets the classification of the Type based on the string. + + The name of the Type to get the classification for. + The Type of Classification + + This parses through the string and makes the assumption that no class + name and no assembly name will contain the "(". + + If it finds + the "(" and then finds a "," afterwards then it is a + TypeClassification.PrecisionScale. + + + If it finds the "(" + and doesn't find a "," afterwards, then it is a + TypeClassification.Length. + + + If it doesn't find the "(" then it assumes that it is a + TypeClassification.Plain. + + + + + + Given the name of a Hibernate type such as Decimal, Decimal(19,0) + , Int32, or even NHibernate.Type.DecimalType, NHibernate.Type.DecimalType(19,0), + NHibernate.Type.Int32Type, then return an instance of NHibernate.Type.IType + + The name of the type. + The instance of the IType that the string represents. + + This method will return null if the name is not found in the basicNameMap. + + + + + Uses heuristics to deduce a NHibernate type given a string naming the + type. + + + An instance of NHibernate.Type.IType + + When looking for the NHibernate type it will look in the cache of the Basic types first. + If it doesn't find it in the cache then it uses the typeName to get a reference to the + Class (Type in .NET). Once we get the reference to the .NET class we check to see if it + implements IType, ICompositeUserType, IUserType, ILifecycle (Association), or + IPersistentEnum. If none of those are implemented then we will serialize the Type to the + database using NHibernate.Type.SerializableType(typeName) + + + + + Uses heuristics to deduce a NHibernate type given a string naming the + type. + + the type name + parameters for the type + An instance of NHibernate.Type.IType + + + + + + + + + + + Gets the BinaryType with the specified length. + + The length of the data to store in the database. + A BinaryType + + In addition to returning the BinaryType it will also ensure that it has + been added to the basicNameMap with the keys Byte[](length) and + NHibernate.Type.BinaryType(length). + + + + + Gets the SerializableType for the specified Type + + The Type that will be Serialized to the database. + A SerializableType + + + In addition to returning the SerializableType it will also ensure that it has + been added to the basicNameMap with the keys Type.FullName (the result + of IType.Name and Type.AssemblyQualifiedName. This is different + from the other items put in the basicNameMap because it is uses the AQN and the + FQN as opposed to the short name used in the maps and the FQN. + + + Since this method calls the method + GetSerializableType(System.Type, Int32) + with the default length, those keys will also be added. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A one-to-one association type for the given class and cascade style. + + + + + A many-to-one association type for the given class and cascade style. + + + + + + + A many-to-one association type for the given class and cascade style. + + + + + A many-to-one association type for the given class and cascade style. + + + + + Creates a new for an . + + The role the collection is in. + The name of the property in the + owner object containing the collection ID, or if it is + the primary key. + The to use to create the array. + + + An for the specified role. + + + + + Creates a new for an . + + The role the collection is in. + The name of the property in the + owner object containing the collection ID, or if it is + the primary key. + + + A for the specified role. + + + + + Creates a new for an + with bag semantics. + + The role the collection is in. + The name of the property in the + owner object containing the collection ID, or if it is + the primary key. + + + A for the specified role. + + + + + Creates a new for an + with id-bag semantics. + + The role the collection is in. + The name of the property in the + owner object containing the collection ID, or if it is + the primary key. + + + A for the specified role. + + + + + Creates a new for an . + + The role the collection is in. + The name of the property in the + owner object containing the collection ID, or if it is + the primary key. + + + A for the specified role. + + + + + Creates a new for an . + + The role the collection is in. + The name of the property in the + owner object containing the collection ID, or if it is + the primary key. + + + A for the specified role. + + + + + Creates a new for an + that is sorted by an . + + The role the collection is in. + The name of the property in the + owner object containing the collection ID, or if it is + the primary key. + The that does the sorting. + + + A for the specified role. + + + + + Creates a new for an + that maintains insertion order of elements. + + The role the collection is in. + The name of the property in the + owner object containing the collection ID, or if it is + the primary key. + + + A for the specified role. + + + + + Creates a new for an + that is sorted by an . + + The role the collection is in. + The name of the property in the + owner object containing the collection ID, or if it is + the primary key. + The that does the sorting. + + + A for the specified role. + + + + + Creates a new for an + with bag semantics. + + The role the collection is in. + The name of the property in the + owner object containing the collection ID, or if it is + the primary key. + + The to use to create the + with. + + + A for the specified role. + + + + + Creates a new for an + with identifier + bag semantics. + + The role the collection is in. + The name of the property in the + owner object containing the collection ID, or if it is + the primary key. + + The to use to create the + with. + + + A for the specified role. + + + + + Creates a new for an + with list + semantics. + + The role the collection is in. + The name of the property in the + owner object containing the collection ID, or if it is + the primary key. + + The to use to create the + with. + + + A for the specified role. + + + + + Creates a new for an + . + + The role the collection is in. + The name of the property in the + owner object containing the collection ID, or if it is + the primary key. + + The to use as the TKey to create the + with. + + + The to use as the TValue to create the + with. + + + A for the specified role. + + + + + Creates a new for an . + + The role the collection is in. + The name of the property in the + owner object containing the collection ID, or if it is + the primary key. + The type of the set elements. + A for the specified role. + + + + Creates a new for a sorted . + + The role the collection is in. + The name of the property in the + owner object containing the collection ID, or if it is + the primary key. + The to use for the set. + The type of the elements in the set. + A for the specified role. + + + Deep copy a series of values from one array to another... + The values to copy (the source) + The value types + an array indicating which values to include in the copy + The array into which to copy the values + The orginating session + + + + Determine if any of the given field values are dirty, + returning an array containing indexes of + the dirty fields or null if no fields are dirty. + + + + + Determine if any of the given field values are modified, + returning an array containing indexes of + the dirty fields or null if no fields are modified. + + + + + + + + + + + + + + Apply the {@link Type#disassemble} operation across a series of values. + The values + The value types + An array indicating which values to include in the disassemled state + The orginating session + The entity "owning" the values + The disassembled state + + + + Apply the operation across a series of values. + + The source of the state + The target into which to replace the source values. + The value types + The orginating session + The entity "owning" the values + Represent a cache of already replaced state + The replaced state + + + + Apply the + operation across a series of values. + + The source of the state + The target into which to replace the source values. + The value types + The orginating session + The entity "owning" the values + A map representing a cache of already replaced state + FK directionality to be applied to the replacement + The replaced state + + + + Apply the + operation across a series of values, as + long as the corresponding is an association. + + The source of the state + The target into which to replace the source values. + The value types + The orginating session + The entity "owning" the values + A map representing a cache of already replaced state + FK directionality to be applied to the replacement + The replaced state + + If the corresponding type is a component type, then apply + accross the component subtypes but do not replace the component value itself. + + + + + Maps the Assembly Qualified Name of a to a + column. + + + + + + + + Initialize a new instance of the TypeType class using a + . + + The underlying . + + + + Gets the in the for the Property. + + The that contains the value. + The index of the field to get the value from. + The from the database. + + Thrown when the value in the database can not be loaded as a + + + + + Gets the in the for the Property. + + The that contains the value. + The name of the field to get the value from. + The from the database. + + This just calls gets the index of the name in the IDataReader + and calls the overloaded version + (IDataReader, Int32). + + + Thrown when the value in the database can not be loaded as a + + + + + Puts the Assembly Qualified Name of the + Property into to the . + + The to put the value into. + The that contains the value. + The index of the to start writing the value to. + + This uses the method of the + object to do the work. + + + + + A representation of the value to be embedded in an XML element + + The that contains the values. + + An Xml formatted string that contains the Assembly Qualified Name. + + + + Gets the that will be returned + by the NullSafeGet() methods. + + + A from the .NET framework. + + + + + + + + Maps a Property + to a column. + + + + + + + + + + + Maps a Property + to a column. + + + + + + + + + + + Maps a Property + to a column. + + + + + + + + Maps a to a 1 char column + that stores a 'Y'/'N' to indicate true/false. + + + If you are using schema-export to generate your tables then you need + to set the column attributes: length=1 or sql-type="char(1)". + + This needs to be done because in Java's JDBC there is a type for CHAR and + in ADO.NET there is not one specifically for char, so you need to tell schema + export to create a char(1) column. + + + + + + + + + + + + + + + + + A UserType that may be dereferenced in a query. + This interface allows a custom type to define "properties". + These need not necessarily correspond to physical .NET style properties. + + A ICompositeUserType may be used in almost every way + that a component may be used. It may even contain many-to-one + associations. + + Implementors must be immutable and must declare a public + default constructor. + + Unlike UserType, cacheability does not depend upon + serializability. Instead, Assemble() and + Disassemble() provide conversion to/from a cacheable + representation. + + + + + Get the value of a property + + an instance of class mapped by this "type" + + the property value + + + + Set the value of a property + + an instance of class mapped by this "type" + + the value to set + + + + Compare two instances of the class mapped by this type for persistence + "equality", ie. equality of persistent state. + + + + + + + + Get a hashcode for the instance, consistent with persistence "equality" + + + + + Retrieve an instance of the mapped class from a IDataReader. Implementors + should handle possibility of null values. + + IDataReader + the column names + + the containing entity + + + + + Write an instance of the mapped class to a prepared statement. + Implementors should handle possibility of null values. + A multi-column type should be written to parameters starting from index. + + + + + + + + + Return a deep copy of the persistent state, stopping at entities and at collections. + + generally a collection element or entity field + + + + + Transform the object into its cacheable representation. + At the very least this method should perform a deep copy. + That may not be enough for some implementations, method should perform a deep copy. That may not be enough for some implementations, however; for example, associations must be cached as identifier values. (optional operation) + + the object to be cached + + + + + + Reconstruct an object from the cacheable representation. + At the very least this method should perform a deep copy. (optional operation) + + the object to be cached + + + + + + + During merge, replace the existing (target) value in the entity we are merging to + with a new (original) value from the detached entity we are merging. For immutable + objects, or null values, it is safe to simply return the first parameter. For + mutable objects, it is safe to return a copy of the first parameter. However, since + composite user types often define component values, it might make sense to recursively + replace component values in the target object. + + + + + Get the "property names" that may be used in a query. + + + + + Get the corresponding "property types" + + + + + The class returned by NullSafeGet(). + + + + + Are objects of this type mutable? + + + + + A custom type that may function as an identifier or discriminator + type, or may be marshalled to and from an XML document. + + + + + The inteface to be implemented by user-defined types. + + + + The inteface abstracts user code from future changes to the inteface, + simplifies the implementation of custom types and hides certain "internal interfaces from + user code. + + + Implemenators must be immutable and must declare a public default constructor. + + + The actual class mapped by a IUserType may be just about anything. However, if it is to + be cacheble by a persistent cache, it must be serializable. + + + Alternatively, custom types could implement directly or extend one of the + abstract classes in NHibernate.Type. This approach risks future incompatible changes + to classes or intefaces in the package. + + + + + + Compare two instances of the class mapped by this type for persistent "equality" + ie. equality of persistent state + + + + + + + + Get a hashcode for the instance, consistent with persistence "equality" + + + + + Retrieve an instance of the mapped class from a JDBC resultset. + Implementors should handle possibility of null values. + + a IDataReader + column names + the containing entity + + HibernateException + + + + Write an instance of the mapped class to a prepared statement. + Implementors should handle possibility of null values. + A multi-column type should be written to parameters starting from index. + + a IDbCommand + the object to write + command parameter index + HibernateException + + + + Return a deep copy of the persistent state, stopping at entities and at collections. + + generally a collection element or entity field + a copy + + + + During merge, replace the existing () value in the entity + we are merging to with a new () value from the detached + entity we are merging. For immutable objects, or null values, it is safe to simply + return the first parameter. For mutable objects, it is safe to return a copy of the + first parameter. For objects with component values, it might make sense to + recursively replace component values. + + the value from the detached entity being merged + the value in the managed entity + the managed entity + the value to be merged + + + + Reconstruct an object from the cacheable representation. At the very least this + method should perform a deep copy if the type is mutable. (optional operation) + + the object to be cached + the owner of the cached object + a reconstructed object from the cachable representation + + + + Transform the object into its cacheable representation. At the very least this + method should perform a deep copy if the type is mutable. That may not be enough + for some implementations, however; for example, associations must be cached as + identifier values. (optional operation) + + the object to be cached + a cacheable representation of the object + + + + The SQL types for the columns mapped by this type. + + + + + The type returned by NullSafeGet() + + + + + Are objects of this type mutable? + + + + + Parse a string representation of this value, as it appears + in an XML document. + + + + + Return an SQL literal representation of the value + + + + + Return a string representation of this value, as it + should appear in an XML document + + + + + Marker interface for user types which want to perform custom + logging of their corresponding values + + + + Generate a loggable string representation of the collection (value). + The collection to be logged; guarenteed to be non-null and initialized. + The factory. + The loggable string representation. + + + + Support for parameterizable types. A UserType or CustomUserType may be + made parameterizable by implementing this interface. Parameters for a + type may be set by using a nested type element for the property element + + + + + Gets called by Hibernate to pass the configured type parameters to + the implementation. + + + + + Instantiate an uninitialized instance of the collection wrapper + + + + + Wrap an instance of a collection + + + + + Return an over the elements of this collection - the passed collection + instance may or may not be a wrapper + + + + + Optional operation. Does the collection contain the entity instance? + + + + + Optional operation. Return the index of the entity in the collection. + + + + + Replace the elements of a collection with the elements of another collection + + + + + Instantiate an empty instance of the "underlying" collection (not a wrapper) + + + + + A user type that may be used for a version property. + + + + + Generate an initial version. + + The session from which this request originates. May be + null; currently this only happens during startup when trying to determine + the "unsaved value" of entities. + an instance of the type + + + + Increment the version. + + The session from which this request originates. + the current version + an instance of the type + + + + Helper class that contains common array functions and + data structures used through out NHibernate. + + + + + Sets item at position to . + Expands the list by adding values, if needed. + + + + + Computes a hash code for . + + The hash code is computed as the sum of hash codes of + individual elements, so that the value is independent of the + collection iteration order. + + + + + Creates a that uses case-insensitive string comparison + associated with invariant culture. + + + This is different from the method in + in that the latter uses the current culture and is thus vulnerable to the "Turkish I" problem. + + + + + Creates a that uses case-insensitive string comparison + associated with invariant culture. + + + This is different from the method in + in that the latter uses the current culture and is thus vulnerable to the "Turkish I" problem. + + + + + Computes a hash code for . + + The hash code is computed as the sum of hash codes of + individual elements, so that the value is independent of the + collection iteration order. + + + + + A read-only dictionary that is always empty and permits lookup by key. + + + + + A read-only dictionary that is always empty and permits lookup by key. + + + + + Utility class implementing ToString for collections. All ToString + overloads call element.ToString(). + + + To print collections of entities or typed values, use + . + + + + + + + + An where keys are compared by object identity, rather than equals. + + All external users of this class need to have no knowledge of the IdentityKey - it is all + hidden by this class. + + + + Do NOT use a System.Value type as the key for this Hashtable - only classes. See + the google thread + about why using System.Value is a bad thing. + + + If I understand it correctly, the first call to get an object defined by a DateTime("2003-01-01") + would box the DateTime and return the identity key for the box. If you were to get that Key and + unbox it into a DateTime struct, then the next time you passed it in as the Key the IdentityMap + would box it again (into a different box) and it would have a different IdentityKey - so you would + not get the same value for the same DateTime value. + + + + + + Create a new instance of the IdentityMap that has no + iteration order. + + A new IdentityMap based on a Hashtable. + + + + Create a new instance of the IdentityMap that has an + iteration order of the order the objects were added + to the Map. + + A new IdentityMap based on ListDictionary. + + + + Return the Dictionary Entries (as instances of DictionaryEntry in a collection + that is safe from concurrent modification). Ie - we may safely add new instances + to the underlying IDictionary during enumeration of the Values. + + The IDictionary to get the enumeration safe list. + A Collection of DictionaryEntries + + + + Create the IdentityMap class with the correct class for the IDictionary. + Unsorted = Hashtable + Sorted = ListDictionary + + A class that implements the IDictionary for storing the objects. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Verifies that we are not using a System.ValueType as the Key in the Dictionary + + The object that will be the key. + An object that is safe to be a key. + Thrown when the obj is a System.ValueType + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Returns the Keys used in this IdentityMap + + + + + + + + + + + + + + + + Provides a snapshot VIEW in the form of a List of the contents of the IdentityMap. + You can safely iterate over this VIEW and modify the actual IdentityMap because the + VIEW is a copy of the contents, not a reference to the existing Map. + + Contains a copy (not that actual instance stored) of the DictionaryEntries in a List. + + + + + Set implementation that use == instead of equals() as its comparison mechanism + that base its implementation of IdentityMap + + + + + Combines multiple objects implementing into one. + + + + + Creates an IEnumerable object from multiple IEnumerables. + + The IEnumerables to join together. + + + + + + + + + + + + + A flag to indicate if Disose() has been called. + + + + + Finalizer that ensures the object is correctly disposed of. + + + + + Takes care of freeing the managed and unmanaged resources that + this class is responsible for. + + + + + Takes care of freeing the managed and unmanaged resources that + this class is responsible for. + + Indicates if this JoinedEnumerable is being Disposed of or Finalized. + + The command is closed and the reader is disposed. This allows other ADO.NET + related actions to occur without needing to move all the way through the + EnumerableImpl. + + + + + + + + A map of objects whose mapping entries are sequenced based on the order in which they were + added. This data structure has fast O(1) search time, deletion time, and insertion time + + + This class is not thread safe. + This class is not a really replication of JDK LinkedHashMap{K, V}, + this class is an adaptation of SequencedHashMap with generics. + + + + + Initializes a new instance of the class that is empty, + has the default initial capacity, and uses the default equality comparer for the key type. + + + + + Initializes a new instance of the class that is empty, + has the specified initial capacity, and uses the default equality comparer for the key type. + + The initial number of elements that the can contain. + + + + Initializes a new instance of the class that is empty, has the default initial capacity, and uses the specified . + + The implementation to use when comparing keys, or null to use the default EqualityComparer for the type of the key. + + + + Initializes a new instance of the class that is empty, has the specified initial capacity, and uses the specified . + + The initial number of elements that the can contain. + The implementation to use when comparing keys, or null to use the default EqualityComparer for the type of the key. + + + + An implementation of a Map which has a maximum size and uses a Least Recently Used + algorithm to remove items from the Map when the maximum size is reached and new items are added. + + + + + A map of objects whose mapping entries are sequenced based on the order in which they were + added. This data structure has fast O(1) search time, deletion time, and insertion time + + + This class is not thread safe. + + + + + Construct an empty sentinel used to hold the head (sentinel.next) and the tail (sentinal.prev) + of the list. The sentinal has a key and value + + + + + + Sentinel used to hold the head and tail of the list of entries + + + + + Map of keys to entries + + + + + Holds the number of modifications that have occurred to the map, excluding modifications + made through a collection view's iterator. + + + + + Construct a new sequenced hash map with default initial size and load factor + + + + + Construct a new sequenced hash map with the specified initial size and default load factor + + the initial size for the hash table + + + + Construct a new sequenced hash map with the specified initial size and load factor + + the initial size for the hashtable + the load factor for the hash table + + + + Construct a new sequenced hash map with the specified initial size, hash code provider + and comparer + + the initial size for the hashtable + + + + + Creates an empty Hashtable with the default initial capacity and using the default load factor, + the specified hash code provider and the specified comparer + + + + + + Creates an empty Hashtable with the default initial capacity and using the default load factor, + the specified hash code provider and the specified comparer + + the initial size for the hashtable + the load factor for the hash table + + + + + Removes an internal entry from the linked list. THis does not remove it from the underlying + map. + + + + + + Inserts a new internal entry to the tail of the linked list. This does not add the + entry to the underlying map. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Remove the Entry identified by the Key if it exists. + + The Key to remove. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Return only the Key of the DictionaryEntry + + + + + Return only the Value of the DictionaryEntry + + + + + Return the full DictionaryEntry + + + + + Summary description for ObjectUtils. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Helper class for Reflection related code. + + + + + Determine if the specified overrides the + implementation of Equals from + + The to reflect. + if any type in the hierarchy overrides Equals(object). + + + + Determine if the specified overrides the + implementation of GetHashCode from + + The to reflect. + if any type in the hierarchy overrides GetHashCode(). + + + + Finds the for the property in the . + + The to find the property in. + The name of the Property to find. + The name of the property access strategy. + The to get the value of the Property. + + This one takes a propertyAccessor name as we might know the correct strategy by now so we avoid Exceptions which are costly + + + + + Get the NHibernate for the named property of the . + + The to find the Property in. + The name of the property/field to find in the class. + The name of the property accessor for the property. + + The NHibernate for the named property. + + + + + Get the for the named property of a type. + + The to find the property in. + The name of the property/field to find in the class. + The name of the property accessor for the property. + The for the named property. + + + + Get the for the named property of a type. + + The FullName to find the property in. + The name of the property/field to find in the class. + The name of the property accessor for the property. + The for the named property. + + + + Returns a reference to the Type. + + The name of the class or a fully qualified name. + The Type for the Class. + + + + Load a System.Type given is't name. + + The class FullName or AssemblyQualifiedName + The System.Type + + If the don't represent an + the method try to find the System.Type scanning all Assemblies of the . + + If no System.Type was found for . + + + + Returns a from an already loaded Assembly or an + Assembly that is loaded with a partial name. + + An . + if an exception should be thrown + in case of an error, otherwise. + + A object that represents the specified type, + or if the type cannot be loaded. + + + Attempts to get a reference to the type from an already loaded assembly. If the + type cannot be found then the assembly is loaded using + . + + + + + Returns the value of the static field of . + + The . + The name of the field in the . + The value contained in the field, or if the type or the field does not exist. + + + + Gets the default no arg constructor for the . + + The to find the constructor for. + + The for the no argument constructor, or if the + type is an abstract class. + + + Thrown when there is a problem calling the method GetConstructor on . + + + + + Finds the constructor that takes the parameters. + + The to find the constructor in. + The objects to use to find the appropriate constructor. + + An that can be used to create the type with + the specified parameters. + + + Thrown when no constructor with the correct signature can be found. + + + + + Determines if the is a non creatable class. + + The to check. + if the is an Abstract Class or an Interface. + + + + Unwraps the supplied + and returns the inner exception preserving the stack trace. + + + The to unwrap. + + The unwrapped exception. + + + + Used to ensecure a collection filtering a given IEnumerable by a certain type. + + The type used like filter. + + + + Cache following a "Most Recently Used" (MRU) algorithm for maintaining a + bounded in-memory size; the "Least Recently Used" (LRU) entry is the first + available for removal from the cache. + + + This implementation uses a bounded MRU Map to limit the in-memory size of + the cache. Thus the size of this cache never grows beyond the stated size. + + + + + Cache following a "Most Recently Used" (MRY) algorithm for maintaining a + bounded in-memory size; the "Least Recently Used" (LRU) entry is the first + available for removal from the cache. + + + This implementation uses a "soft limit" to the in-memory size of the cache, + meaning that all cache entries are kept within a completely + {@link java.lang.ref.SoftReference}-based map with the most recently utilized + entries additionally kept in a hard-reference manner to prevent those cache + entries soft references from becoming enqueued by the garbage collector. + Thus the actual size of this cache impl can actually grow beyond the stated + max size bound as long as GC is not actively seeking soft references for + enqueuement. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Just a façade for calling string.Split() + We don't use our StringTokenizer because string.Split() is + more efficient (but it only works when we don't want to retrieve the delimiters) + + separators for the tokens of the list + the string that will be broken into tokens + + + + + Splits the String using the StringTokenizer. + + separators for the tokens of the list + the string that will be broken into tokens + true to include the seperators in the tokens. + + + This is more powerful than Split because you have the option of including or + not including the seperators in the tokens. + + + + + + + + + + + + + + + + + + + + Takes a fully qualified type name and returns the full name of the + Class - includes namespaces. + + + + + + + Takes a fully qualifed type name (can include the assembly) and just returns + the name of the Class. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Converts a in the format of "true", "t", "false", or "f" to + a . + + The string to convert. + + The value converted to a . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Counts the unquoted instances of the character. + + + + + + + + + + + + + + + + Generate a nice alias for the given class name or collection role + name and unique integer. Subclasses do not have to use + aliases of this form. + + an alias of the form foo1_ + + + + Returns the interned string equal to if there is one, or + otherwise. + + A + A + + + + A StringTokenizer java like object + + + + + + + + + + + + + + + + + + + + + + + + + + Count of elements in the collection. Unreliable! + + + + + Indicates failure of an assertion: a possible bug in NHibernate + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The message that describes the error. + + + + Initializes a new instance of the class. + + The message that describes the error. + + The exception that is the cause of the current exception. If the innerException parameter + is not a null reference, the current exception is raised in a catch block that handles + the inner exception. + + + + + Initializes a new instance of the class. + + + The that holds the serialized object + data about the exception being thrown. + + + The that contains contextual information about the source or destination. + + + + + Controls how the session interacts with the second-level + cache and query cache. + + + + + The session will never interact with the cache, except to invalidate + cache items when updates occur + + + + + The session will never read items from the cache, but will add items + to the cache as it reads them from the database. + + + + + The session may read items from the cache, but will not add items, + except to invalidate items when updates occur + + + + The session may read items from the cache, and add items to the cache + + + + The session will never read items from the cache, but will add items + to the cache as it reads them from the database. In this mode, the + effect of hibernate.cache.use_minimal_puts is bypassed, in + order to force a cache refresh + + + + + + + + Initializes a new instance of the class. + + + The exception that is the cause of the current exception. If the innerException parameter + is not a null reference, the current exception is raised in a catch block that handles + the inner exception. + + + + + Initializes a new instance of the class. + + The message that describes the error. + + + + Initializes a new instance of the class. + + The message that describes the error. + + The exception that is the cause of the current exception. If the innerException parameter + is not a null reference, the current exception is raised in a catch block that handles + the inner exception. + + + + + Initializes a new instance of the class + with serialized data. + + + The that holds the serialized object + data about the exception being thrown. + + + The that contains contextual information about the source or destination. + + + + + Transforms Criteria queries + + + + + Returns a clone of the original criteria, which will return the count + of rows that are returned by the original criteria query. + + + + + Returns a clone of the original criteria, which will return the count + of rows that are returned by the original criteria query. + + + + + Creates an exact clone of the criteria + + + + + + Creates an exact clone of the criteria + + + + + + Contains static declarations from Criteria interface in Hibernate. + + + + + The alias that refers to the "root" entity of the criteria query. + + + + + Each row of results is an IDictionary from alias to entity instance + + + + + Each row of results is an instance of the root entity + + + + + Each row of results is a distinct instance of the root entity + + + + + Initializes a new instance of the class. + + The message that describes the error. + The name of the duplicate object + The type of the duplicate object + + + + Initializes a new instance of the class. + + The name of the duplicate object + The type of the duplicate object + + + + Initializes a new instance of the class + with serialized data. + + + The that holds the serialized object + data about the exception being thrown. + + + The that contains contextual information about the source or destination. + + + + + The type of the duplicated object + + + + + The name of the duplicated object + + + + + Allows user code to inspect and/or change property values before they are written and after they + are read from the database + + + + There might be a single instance of IInterceptor for a SessionFactory, or a new + instance might be specified for each ISession. Whichever approach is used, the interceptor + must be serializable if the ISession is to be serializable. This means that SessionFactory + -scoped interceptors should implement ReadResolve(). + + + The ISession may not be invoked from a callback (nor may a callback cause a collection or + proxy to be lazily initialized). + + + + + + Called just before an object is initialized + + + + + + + + The interceptor may change the state, which will be propagated to the persistent + object. Note that when this method is called, entity will be an empty + uninitialized instance of the class. + if the user modified the state in any way + + + + Called when an object is detected to be dirty, during a flush. + + + + + + + + + The interceptor may modify the detected currentState, which will be propagated to + both the database and the persistent object. Note that all flushes end in an actual + synchronization with the database, in which as the new currentState will be propagated + to the object, but not necessarily (immediately) to the database. It is strongly recommended + that the interceptor not modify the previousState. + + if the user modified the currentState in any way + + + + Called before an object is saved + + + + + + + + The interceptor may modify the state, which will be used for the SQL INSERT + and propagated to the persistent object + + if the user modified the state in any way + + + + Called before an object is deleted + + + + + + + + It is not recommended that the interceptor modify the state. + + + + Called before a collection is (re)created. + + + Called before a collection is deleted. + + + Called before a collection is updated. + + + + Called before a flush + + The entities + + + + Called after a flush that actually ends in execution of the SQL statements required to + synchronize in-memory state with the database. + + The entitites + + + + Called when a transient entity is passed to SaveOrUpdate. + + + The return value determines if the object is saved + + - the entity is passed to Save(), resulting in an INSERT + - the entity is passed to Update(), resulting in an UPDATE + - Hibernate uses the unsaved-value mapping to determine if the object is unsaved + + + A transient entity + Boolean or to choose default behaviour + + + + Called from Flush(). The return value determines whether the entity is updated + + + + an array of property indicies - the entity is dirty + an empty array - the entity is not dirty + - use Hibernate's default dirty-checking algorithm + + + A persistent entity + + + + + + An array of dirty property indicies or to choose default behavior + + + + Instantiate the entity class. Return to indicate that Hibernate should use the default + constructor of the class + + the name of the entity + The type of entity instance to be returned. + the identifier of the new instance + An instance of the class, or to choose default behaviour + + The identifier property of the returned instance + should be initialized with the given identifier. + + + + Get the entity name for a persistent or transient instance + an entity instance + the name of the entity + + + Get a fully loaded entity instance that is cached externally + the name of the entity + the instance identifier + a fully initialized entity + + + + Called when a NHibernate transaction is begun via the NHibernate + API. Will not be called if transactions are being controlled via some other mechanism. + + + + + Called before a transaction is committed (but not before rollback). + + + + + Called after a transaction is committed or rolled back. + + + + + Called when a session-scoped (and only session scoped) interceptor is attached + to a session + + + + Called when sql string is being prepared. + sql to be prepared + original or modified sql + + + Defines the representation modes available for entities. + + + + Represents a fetching strategy. + + + This is used together with the API to specify + runtime fetching strategies. + + For Hql queries, use the FETCH keyword instead. + + + + + + Default to the setting configured in the mapping file. + + + + + Fetch eagerly, using a separate select. Equivalent to + fetch="select" (and outer-join="false") + + + + + Fetch using an outer join. Equivalent to + fetch="join" (and outer-join="true") + + + + + Indicates that an expected getter or setter method could not be found on a class + + + + + Initializes a new instance of the class. + + The message that describes the error. + + + + Initializes a new instance of the class. + + The message that describes the error. + + The exception that is the cause of the current exception. If the innerException parameter + is not a null reference, the current exception is raised in a catch block that handles + the inner exception. + + + + + Initializes a new instance of the class + with serialized data. + + + The that holds the serialized object + data about the exception being thrown. + + + The that contains contextual information about the source or destination. + + + + + Represents a flushing strategy. + + + The flush process synchronizes database state with session state by detecting state + changes and executing SQL statements + + + + + Special value for unspecified flush mode (like in Java). + + + + + The ISession is never flushed unless Flush() is explicitly + called by the application. This mode is very efficient for read only + transactions + + + + + The ISession is flushed when Transaction.Commit() is called + + + + + The ISession is sometimes flushed before query execution in order to + ensure that queries never return stale state. This is the default flush mode. + + + + + The is flushed before every query. This is + almost always unnecessary and inefficient. + + + + + Provides XML marshalling for classes registered with a SessionFactory + + + + Hibernate defines a generic XML format that may be used to represent any class + (hibernate-generic.dtd). The user configures an XSLT stylesheet for marshalling + data from this generic format to an application and/or user readable format. By default, + Hibernate will use hibernate-default.xslt which maps data to a useful human- + readable format. + + + The property xml.output_stylesheet specifies a user-written stylesheet. + Hibernate will attempt to load the stylesheet from the classpath first and if not found, + will attempt to load it as a file + + + It is not intended that implementors be threadsafe + + + + + + Add an object to the output document. + + A transient or persistent instance + Databinder + + + + Add a collection of objects to the output document + + A collection of transient or persistent instance + Databinder + + + + Output the generic XML representation of the bound objects + + Generic Xml representation + + + + Output the generic XML Representation of the bound objects + to a XmlDocument + + A generic Xml tree + + + + Output the custom XML representation of the bound objects + + Custom Xml representation + + + + Output the custom XML representation of the bound objects as + an XmlDocument + + A custom Xml Tree + + + + Controls whether bound objects (and their associated objects) that are lazily instanciated + are explicityl initialized or left as they are + + True to explicitly initilize lazy objects, false to leave them in the state they are in + + + + Performs a null safe comparison using "==" instead of Object.Equals() + + First object to compare. + Second object to compare. + + true if x is the same instance as y or if both are null references; otherwise, false. + + + This is Lazy collection safe since it uses , + unlike Object.Equals() which currently causes NHibernate to load up the collection. + This behaivior of Collections is likely to change because Java's collections override Equals() and + .net's collections don't. So in .net there is no need to override Equals() and + GetHashCode() on the NHibernate Collection implementations. + + + + + Thrown if Hibernate can't instantiate an entity or component class at runtime. + + + + + Initializes a new instance of the class. + + The message that describes the error. + + The exception that is the cause of the current exception. If the innerException parameter + is not a null reference, the current exception is raised in a catch block that handles + the inner exception. + + The that NHibernate was trying to instantiate. + + + + Initializes a new instance of the class + with serialized data. + + + The that holds the serialized object + data about the exception being thrown. + + + The that contains contextual information about the source or destination. + + + + + Sets the serialization info for after + getting the info from the base Exception. + + + The that holds the serialized object + data about the exception being thrown. + + + The that contains contextual information about the source or destination. + + + + + Gets the that NHibernate was trying to instantiate. + + + + + Gets a message that describes the current . + + + The error message that explains the reason for this exception and the Type that + was trying to be instantiated. + + + + + Thrown when an invalid type is specified as a proxy for a class. + The exception is also thrown when a class is specified as lazy, + but cannot be used as a proxy for itself. + + + + + A problem occurred trying to lazily initialize a collection or proxy (for example the session + was closed) or iterate query results. + + + + + Initializes a new instance of the class. + + The message that describes the error. + + + + Initializes a new instance of the class. + + + The exception that is the cause of the current exception. If the innerException parameter + is not a null reference, the current exception is raised in a catch block that handles + the inner exception. + + + + + Initializes a new instance of the class. + + The message that describes the error. + + The exception that is the cause of the current exception. If the innerException parameter + is not a null reference, the current exception is raised in a catch block that handles + the inner exception. + + + + + Initializes a new instance of the class + with serialized data. + + + The that holds the serialized object + data about the exception being thrown. + + + The that contains contextual information about the source or destination. + + + + + Instances represent a lock mode for a row of a relational database table. + + + It is not intended that users spend much time worrying about locking since Hibernate + usually obtains exactly the right lock level automatically. Some "advanced" users may + wish to explicitly specify lock levels. + + + + + + + + + + + + + + + Is this lock mode more restrictive than the given lock mode? + + + + + + Is this lock mode less restrictive than the given lock mode? + + + + + + No lock required. + + + If an object is requested with this lock mode, a Read lock + might be obtained if necessary. + + + + + A shared lock. + + + Objects are loaded in Read mode by default + + + + + An upgrade lock. + + + Objects loaded in this lock mode are materialized using an + SQL SELECT ... FOR UPDATE + + + + + Attempty to obtain an upgrade lock, using an Oracle-style + SELECT ... FOR UPGRADE NOWAIT. + + + The semantics of this lock mode, once obtained, are the same as Upgrade + + + + + A Write lock is obtained when an object is updated or inserted. + + + This is not a valid mode for Load() or Lock(). + + + + + Similiar to except that, for versioned entities, + it results in a forced version increment. + + + + + Provides access to the full range of NHibernate built-in types. + IType instances may be used to bind values to query parameters. + Also a factory for new Blobs and Clobs. + + + + + Guesses the IType of this object + + The obj. + + + + + Guesses the IType by the type + + The type. + + + + + NHibernate Ansi String type + + + + + NHibernate binary type + + + + + NHibernate binary blob type + + + + + NHibernate boolean type + + + + + NHibernate byte type + + + + + NHibernate character type + + + + + NHibernate Culture Info type + + + + + NHibernate date type + + + + + NHibernate date type + + + + + NHibernate decimal type + + + + + NHibernate double type + + + + + NHibernate Guid type. + + + + + NHibernate System.Int16 (short in C#) type + + + + + NHibernate System.Int32 (int in C#) type + + + + + NHibernate System.Int64 (long in C#) type + + + + + NHibernate System.SByte type + + + + + NHibernate System.UInt16 (ushort in C#) type + + + + + NHibernate System.UInt32 (uint in C#) type + + + + + NHibernate System.UInt64 (ulong in C#) type + + + + + NHIbernate System.Single (float in C#) Type + + + + + NHibernate String type + + + + + NHibernate string clob type + + + + + NHibernate Time type + + + + + NHibernate Ticks type + + + + + NHibernate Ticks type + + + + + NHibernate Timestamp type + + + + + NHibernate TrueFalse type + + + + + NHibernate YesNo type + + + + + NHibernate class type + + + + + NHibernate serializable type + + + + + NHibernate System.Object type + + + + + A NHibernate persistent enum type + + + + + + + A NHibernate serializable type + + + + + + + A NHibernate serializable type + + a type mapping to a single column + the entity identifier type + + + + + A NHibernate persistent object (entity) type + + a mapped entity class + + + + + A NHibernate persistent object (entity) type + + a mapped entity class + + + + A Hibernate persistent object (entity) type. + a mapped entity class + + + + A NHibernate custom type + + a class that implements UserType + + + + + Force initialization of a proxy or persistent collection. + + a persistable object, proxy, persistent collection or null + if we can't initialize the proxy at this time, eg. the Session was closed + + + + Is the proxy or persistent collection initialized? + + a persistable object, proxy, persistent collection or null + true if the argument is already initialized, or is not a proxy or collection + + + + Get the true, underlying class of a proxied persistent class. This operation + will initialize a proxy by side-effect. + + a persistable object or proxy + the true class of the instance + + + + Close an obtained from an + returned by NHibernate immediately, instead of waiting until the session is + closed or disconnected. + + + + + Close an returned by NHibernate immediately, + instead of waiting until the session is closed or disconnected. + + + + + Check if the property is initialized. If the named property does not exist + or is not persistent, this method always returns true. + + The potential proxy + the name of a persistent attribute of the object + + true if the named property of the object is not listed as uninitialized; + false if the object is an uninitialized proxy, or the named property is uninitialized + + + + + This exception is thrown when an operation would + break session-scoped identity. This occurs if the + user tries to associate two different instances of + the same class with a particular identifier, + in the scope of a single . + + + + + Initializes a new instance of the class. + + The message that describes the error. + The identifier of the object that caused the exception. + The EntityName of the object attempted to be loaded. + + + + Initializes a new instance of the class. + + The identifier of the object that caused the exception. + The EntityName of the object attempted to be loaded. + + + + Initializes a new instance of the class. + + + + + Sets the serialization info for after + getting the info from the base Exception. + + + The that holds the serialized object + data about the exception being thrown. + + + The that contains contextual information about the source or destination. + + + + + Thrown when the application calls IQuery.UniqueResult() + and the query returned more than one result. Unlike all other NHibernate + exceptions, this one is recoverable! + + + + + Initializes a new instance of the class. + + The number of items in the result. + + + + Initializes a new instance of the class + with serialized data. + + + The that holds the serialized object + data about the exception being thrown. + + + The that contains contextual information about the source or destination. + + + + + Thrown when the user tries to pass a deleted object to the ISession. + + + + + Thrown when Hibernate could not resolve an object by id, especially when + loading an association. + + + + + Initializes a new instance of the class. + + The identifier of the object that caused the exception. + The of the object attempted to be loaded. + + + + Initializes a new instance of the class. + + The message that describes the error. + The identifier of the object that caused the exception. + The of the object attempted to be loaded. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class + with serialized data. + + + The that holds the serialized object + data about the exception being thrown. + + + The that contains contextual information about the source or destination. + + + + + Thrown when ISession.Load() fails to select a row with + the given primary key (identifier value). This exception might not + be thrown when Load() is called, even if there was no + row on the database, because Load() returns a proxy if + possible. Applications should use ISession.Get() to test if + a row exists in the database. + + + + + Initializes a new instance of the class. + + The identifier of the object that was attempting to be loaded. + The that NHibernate was trying to find a row for in the database. + + + + Initializes a new instance of the class + with serialized data. + + + The that holds the serialized object + data about the exception being thrown. + + + The that contains contextual information about the source or destination. + + + + + Thrown when the user passes a persistent instance to a ISession method that expects a + transient instance + + + + + Initializes a new instance of the class. + + The message that describes the error. + + + + Initializes a new instance of the class + with serialized data. + + + The that holds the serialized object + data about the exception being thrown. + + + The that contains contextual information about the source or destination. + + + + + A problem occurred accessing a property of an instance of a persistent class by reflection + + + + + Initializes a new instance of the class. + + The message that describes the error. + + The exception that is the cause of the current exception. If the innerException parameter + is not a null reference, the current exception is raised in a catch block that handles + the inner exception. + + A indicating if this was a "setter" operation. + The that NHibernate was trying find the Property or Field in. + The mapped property name that was trying to be accessed. + + + + Initializes a new instance of the class + with serialized data. + + + The that holds the serialized object + data about the exception being thrown. + + + The that contains contextual information about the source or destination. + + + + + Sets the serialization info for after + getting the info from the base Exception. + + + The that holds the serialized object + data about the exception being thrown. + + + The that contains contextual information about the source or destination. + + + + + Gets the that NHibernate was trying find the Property or Field in. + + + + + Gets a message that describes the current . + + + The error message that explains the reason for this exception and + information about the mapped property and its usage. + + + + + Indicates that an expected getter or setter method could not be found on a class + + + + + Initializes a new instance of the class, + used when a property get/set accessor is missing. + + The that is missing the property + The name of the missing property + The type of the missing accessor + ("getter" or "setter") + + + + Initializes a new instance of the class, + used when a field is missing. + + The that is missing the field + The name of the missing property + + + + Initializes a new instance of the class + with serialized data. + + + The that holds the serialized object + data about the exception being thrown. + + + The that contains contextual information about the source or destination. + + + + + Initializes a new instance of the class. + + The message that describes the error. + The that NHibernate was trying to access. + The name of the Property that was being get/set. + + + + Initializes a new instance of the class + with serialized data. + + + The that holds the serialized object + data about the exception being thrown. + + + The that contains contextual information about the source or destination. + + + + + Sets the serialization info for after + getting the info from the base Exception. + + + The that holds the serialized object + data about the exception being thrown. + + + The that contains contextual information about the source or destination. + + + + + Represents a replication strategy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Throw an exception when a row already exists + + + + + + + + + + Ignore replicated entities when a row already exists + + + + + + + + + + Overwrite existing rows when a row already exists + + + + + + + + + + When a row already exists, choose the latest version + + + + + + + + + + Thrown when a version number check failed, indicating that the + contained stale data (when using long transactions with + versioning). + + + + + Initializes a new instance of the class. + + The EntityName that NHibernate was trying to update in the database. + The identifier of the object that is stale. + + + + Initializes a new instance of the class + with serialized data. + + + The that holds the serialized object + data about the exception being thrown. + + + The that contains contextual information about the source or destination. + + + + + Sets the serialization info for after + getting the info from the base Exception. + + + The that holds the serialized object + data about the exception being thrown. + + + The that contains contextual information about the source or destination. + + + + + Gets the EntityName that NHibernate was trying to update in the database. + + + + + Gets the identifier of the object that is stale. + + + + + Gets a message that describes the current . + + The error message that explains the reason for this exception. + + + + Indicated that a transaction could not be begun, committed, or rolled back + + + + + Initializes a new instance of the class. + + The message that describes the error. + + + + Initializes a new instance of the class. + + The message that describes the error. + + The exception that is the cause of the current exception. If the innerException parameter + is not a null reference, the current exception is raised in a catch block that handles + the inner exception. + + + + + Initializes a new instance of the class + with serialized data. + + + The that holds the serialized object + data about the exception being thrown. + + + The that contains contextual information about the source or destination. + + + + + Throw when the user passes a transient instance to a ISession method that expects + a persistent instance + + + + + Initializes a new instance of the class. + + The message that describes the error. + + + + Initializes a new instance of the class + with serialized data. + + + The that holds the serialized object + data about the exception being thrown. + + + The that contains contextual information about the source or destination. + + + + + Used when a user provided type does not match the expected one + + + + + Thrown when ISession.Load() selects a row with the given primary key (identifier value) + but the row's discriminator value specifies a different subclass from the one requested + + + + + Initializes a new instance of the class. + + The message that describes the error. + The identifier of the object that was being loaded. + The name of entity that NHibernate was told to load. + + + + Initializes a new instance of the class + with serialized data. + + + The that holds the serialized object + data about the exception being thrown. + + + The that contains contextual information about the source or destination. + + + + + Sets the serialization info for after + getting the info from the base Exception. + + + The that holds the serialized object + data about the exception being thrown. + + + The that contains contextual information about the source or destination. + + + + + Gets the identifier of the object that was being loaded. + + + + + Gets the name of entity that NHibernate was told to load. + + + + + Gets a message that describes the current . + + The error message that explains the reason for this exception. + +
+
diff --git a/tools/NHibernate/Rhino.Mocks.dll b/tools/NHibernate/Rhino.Mocks.dll new file mode 100644 index 000000000..e6f83e89a Binary files /dev/null and b/tools/NHibernate/Rhino.Mocks.dll differ diff --git a/tools/NHibernate/Rhino.Mocks.xml b/tools/NHibernate/Rhino.Mocks.xml new file mode 100644 index 000000000..68fbb77f1 --- /dev/null +++ b/tools/NHibernate/Rhino.Mocks.xml @@ -0,0 +1,7677 @@ + + + + Rhino.Mocks + + + + + What should BackToRecord clear + + + + + Nothing + + + + + Event subscribers for this instance + + + + + Methods that should be forwarded to the base class implementation + + + + + Properties that should behave like properties + + + + + Remove al the behavior of the object + + + + + Interface for constraints + + + + + determains if the object pass the constraints + + + + + And operator for constraints + + + + + Not operator for constraints + + + + + Or operator for constraints + + + + + Allow overriding of || or && + + + + + + + + + Allow overriding of || or && + + + + + + + + + Gets the message for this constraint + + + + + + + Constrain that the public field matches another constraint. + + + + + Creates a new instance. + + Name of the public field. + Constraint to place on the public field value. + + + + Creates a new instance, specifying a disambiguating + for the public field. + + The type that declares the public field, used to disambiguate between public fields. + Name of the public field. + Constraint to place on the public field value. + + + + Determines if the object passes the constraint. + + + + + Gets the message for this constraint + + + + + + + Constrain that the public field has a specified value + + + + + Creates a new instance. + + Name of the public field. + Expected value. + + + + Creates a new instance, specifying a disambiguating + for the public field. + + The type that declares the public field, used to disambiguate between public fields. + Name of the public field. + Expected value. + + + + Constrain that the property matches another constraint. + + + + + Creates a new instance. + + Name of the property. + Constraint to place on the property value. + + + + Creates a new instance, specifying a disambiguating + for the property. + + The type that declares the property, used to disambiguate between properties. + Name of the property. + Constraint to place on the property value. + + + + Determines if the object passes the constraint. + + + + + Gets the message for this constraint + + + + + + + Constrain that the property has a specified value + + + + + Creates a new instance. + + Name of the property. + Expected value. + + + + Creates a new instance, specifying a disambiguating + for the property. + + The type that declares the property, used to disambiguate between properties. + Name of the property. + Expected value. + + + + Constrain that the parameter must be of the specified type + + + + + Creates a new instance. + + Type. + + + + determains if the object pass the constraints + + + + + Gets the message for this constraint + + + + + + + Constraint that determines whether an object is the same object as another. + + + + + Creates a new instance. + + Obj. + + + + Determines if the object passes the constraints. + + + + + Gets the message for this constraint. + + + + + Evaluate a parameter using constraints + + + + + Create new instance + + + + + + + determains if the object pass the constraints + + + + + Gets the message for this constraint + + + + + + + Constrain that the list contains the same items as the parameter list + + + + + Creates a new instance. + + In list. + + + + determains if the object pass the constraints + + + + + Gets the message for this constraint + + + + + + + Constrain that the parameter is one of the items in the list + + + + + Creates a new instance. + + In list. + + + + determains if the object pass the constraints + + + + + Gets the message for this constraint + + + + + + + Constrain that the object is inside the parameter list + + + + + Creates a new instance. + + In list. + + + + determains if the object pass the constraints + + + + + Gets the message for this constraint + + + + + + + Applies another AbstractConstraint to the collection count. + + + + + Creates a new instance. + + The constraint that should be applied to the collection count. + + + + Determines if the parameter conforms to this constraint. + + + + + Gets the message for this constraint. + + + + + Applies another AbstractConstraint to a specific list element. + + + + + Creates a new instance. + + The zero-based index of the list element. + The constraint that should be applied to the list element. + + + + Determines if the parameter conforms to this constraint. + + + + + Gets the message for this constraint + + + + + + + Combines two constraints, constraint pass if either is fine. + + + + + Creates a new instance. + + C1. + C2. + + + + determains if the object pass the constraints + + + + + Gets the message for this constraint + + + + + + + Negate a constraint + + + + + Creates a new instance. + + C1. + + + + determains if the object pass the constraints + + + + + Gets the message for this constraint + + + + + + + Combines two constraints + + + + + + + Creates a new instance. + + C1. + C2. + + + + determains if the object pass the constraints + + + + + Gets the message for this constraint + + + + + + + Constrain the argument to validate according to regex pattern + + + + + Creates a new instance. + + Pattern. + + + + determains if the object pass the constraints + + + + + Gets the message for this constraint + + + + + + + Constraint that evaluate whatever an argument contains the specified string. + + + + + Creates a new instance. + + Inner string. + + + + determains if the object pass the constraints + + + + + Gets the message for this constraint + + + + + + + Constraint that evaluate whatever an argument ends with the specified string + + + + + Creates a new instance. + + End. + + + + determains if the object pass the constraints + + + + + Gets the message for this constraint + + + + + + + Constraint that evaluate whatever an argument start with the specified string + + + + + Creates a new instance. + + Start. + + + + determains if the object pass the constraints + + + + + Gets the message for this constraint + + + + + + + Constraint that evaluate whatever an object equals another + + + + + Creates a new instance. + + Obj. + + + + determains if the object pass the constraints + + + + + Gets the message for this constraint + + + + + + + Constraint that always returns true + + + + + determains if the object pass the constraints + + + + + Gets the message for this constraint + + + + + + + Constraint that evaluate whatever a comparable is greater than another + + + + + Creates a new instance. + + + + + determains if the object pass the constraints + + + + + Gets the message for this constraint + + + + + + + Central location for constraints for object's public fields + + + + + Constrains the parameter to have a public field with the specified value + + Name of the public field. + Expected value. + + + + + + Constrains the parameter to have a public field with the specified value. + + The type that declares the public field, used to disambiguate between public fields. + Name of the public field. + Expected value. + + + + + + Constrains the parameter to have a public field satisfying a specified constraint. + + Name of the public field. + Constraint for the public field. + + + + Constrains the parameter to have a public field satisfying a specified constraint. + + The type that declares the public field, used to disambiguate between public fields. + Name of the public field. + Constraint for the public field. + + + + Determines whether the parameter has the specified public field and that it is null. + + Name of the public field. + + + + + + Determines whether the parameter has the specified public field and that it is null. + + The type that declares the public field, used to disambiguate between public fields. + Name of the public field. + + + + + + Determines whether the parameter has the specified public field and that it is not null. + + Name of the public field. + + + + + + Determines whether the parameter has the specified public field and that it is not null. + + The type that declares the public field, used to disambiguate between public fields. + Name of the public field. + + + + + + Central location for constraints + + + + + Evaluate a greater than constraint for . + + The object the parameter should be greater than + + + + Evaluate a less than constraint for . + + The object the parameter should be less than + + + + Evaluate a less than or equal constraint for . + + The object the parameter should be less than or equal to + + + + Evaluate a greater than or equal constraint for . + + The object the parameter should be greater than or equal to + + + + Evaluate an equal constraint for . + + The object the parameter should equal to + + + + Evaluate a not equal constraint for . + + The object the parameter should not equal to + + + + Evaluate a same as constraint. + + The object the parameter should the same as. + + + + Evaluate a not same as constraint. + + The object the parameter should not be the same as. + + + + A constraints that accept anything + + + + + + + A constraint that accept only nulls + + + + + + + A constraint that accept only non null values + + + + + + + A constraint that accept only value of the specified type + + + + + A constraint that accept only value of the specified type + + + + + Evaluate a parameter using a predicate + + The predicate to use + + + + Central location for constraints about lists and collections + + + + + Determines whether the specified obj is in the paramter. + The parameter must be IEnumerable. + + Obj. + + + + + + Determains whatever the parameter is in the collection. + + + + + Determains that the parameter collection is identical to the specified collection + + + + + Determines that the parameter collection has the specified number of elements. + + The constraint that should be applied to the collection count. + + + + Determines that an element of the parameter collections conforms to another AbstractConstraint. + + The zero-based index of the list element. + The constraint which should be applied to the list element. + + + + Central location for constraints for object's properties + + + + + Constrains the parameter to have property with the specified value + + Name of the property. + Expected value. + + + + + + Constrains the parameter to have property with the specified value. + + The type that declares the property, used to disambiguate between properties. + Name of the property. + Expected value. + + + + + + Constrains the parameter to have a property satisfying a specified constraint. + + Name of the property. + Constraint for the property. + + + + Constrains the parameter to have a property satisfying a specified constraint. + + The type that declares the property, used to disambiguate between properties. + Name of the property. + Constraint for the property. + + + + Determines whether the parameter has the specified property and that it is null. + + Name of the property. + + + + + + Determines whether the parameter has the specified property and that it is null. + + The type that declares the property, used to disambiguate between properties. + Name of the property. + + + + + + Determines whether the parameter has the specified property and that it is not null. + + Name of the property. + + + + + + Determines whether the parameter has the specified property and that it is not null. + + The type that declares the property, used to disambiguate between properties. + Name of the property. + + + + + + Central location for all text related constraints + + + + + Constrain the argument to starts with the specified string + + + + + Constrain the argument to end with the specified string + + + + + Constrain the argument to contain the specified string + + + + + Constrain the argument to validate according to regex pattern + + + + + An expectaton violation was detected. + + + + + Creates a new instance. + + Message. + + + + Serialization constructor + + + + + Signals that an object was call on a mock repostiroy which doesn't + belong to this mock repository or not a mock + + + + + Creates a new instance. + + Message. + + + + Serialization constructor + + + + + Allows to set expectation on methods that has return values. + For methods with void return value, you need to use LastCall + + + + + A delegate that execute an action + + + + + The method options for the last call on /any/ proxy on /any/ repository on the current thread. + This method if not safe for multi threading scenarios, use . + + + + + Accepts a delegate that will execute inside the method, and then return the resulting + instance. + It is expected to be used with anonymous delegates / lambda expressions and only one + method should be called. + + + IService mockSrv = mocks.CreateMock(typeof(IService)) as IService; + Expect.Call(delegate{ mockSrv.Start(); }).Throw(new NetworkException()); + ... + + + + + Get the method options for the last method call on the mockInstance. + + + + + Interface to validate that a method call is correct. + + + + + Validate the arguments for the method. + This method can be called numerous times, so be careful about side effects + + The arguments with which the method was called + + + + Add an actual method call to this expectation + + + + + Returns the return value or throw the exception and setup any output / ref parameters + that has been set. + + + + + Gets the error message. + + + + + + + Range of expected calls + + + + + Number of call actually made for this method + + + + + If this expectation is still waiting for calls. + + + + + The return value for a method matching this expectation + + + + + Gets or sets the exception to throw on a method matching this expectation. + + + + + Gets a value indicating whether this instance's action is staisfied. + A staisfied instance means that there are no more requirements from + this method. A method with non void return value must register either + a return value or an exception to throw. + + + + + Gets the method this expectation is for. + + + + + Gets or sets what special condtions there are for this method + repeating. + + + + + Gets a value indicating whether this expectation was satisfied + + + + + Specify whatever this expectation has a return value set + You can't check ReturnValue for this because a valid return value include null. + + + + + An action to execute when the method is matched. + + + + + Set the out / ref parameters for the method call. + The indexing is zero based and ignores any non out/ref parameter. + It is possible not to pass all the parameters. This method can be called only once. + + + + + Documentation Message + + + + + Gets the invocation for this expectation + + The invocation. + + + + Abstract class that holds common information for + expectations. + + + + + Number of actuall calls made that passed this expectation + + + + + Range of expected calls that should pass this expectation. + + + + + The return value for a method matching this expectation + + + + + The exception to throw on a method matching this expectation. + + + + + The method this expectation is for. + + + + + The return value for this method was set + + + + + Whether this method will repeat + unlimited number of times. + + + + + A delegate that will be run when the + expectation is matched. + + + + + The arguments that matched this expectation. + + + + + Documentation message + + + + + The method originalInvocation + + + + + Get the hash code + + + + + Add an actual method call to this expectation + + + + + Returns the return value or throw the exception and setup output / ref parameters + + + + + Validate the arguments for the method on the child methods + + The arguments with which the method was called + + + + Creates a new instance. + + The originalInvocation for this method, required because it contains the generic type infromation + + + + Creates a new instance. + + Expectation. + + + + Validate the arguments for the method on the child methods + + The arguments with which the method was called + + + + Determines if this object equal to obj + + + + + The error message for these arguments + + + + + Asserts that the delegate has the same parameters as the expectation's method call + + + + + Setter for the outpur / ref parameters for this expecataion. + Can only be set once. + + + + + Specify whatever this expectation has a return value set + You can't check ReturnValue for this because a valid return value include null. + + + + + Gets the method this expectation is for. + + + + + Gets the originalInvocation for this expectation + + The originalInvocation. + + + + Gets or sets what special condtions there are for this method + + + + + Range of expected calls + + + + + Number of call actually made for this method + + + + + If this expectation is still waiting for calls. + + + + + Gets a value indicating whether this expectation was satisfied + + + + + The return value for a method matching this expectation + + + + + An action to execute when the method is matched. + + + + + Gets or sets the exception to throw on a method matching this expectation. + + + + + Gets a value indicating whether this instance's action is staisfied. + A staisfied instance means that there are no more requirements from + this method. A method with non void return value must register either + a return value or an exception to throw or an action to execute. + + + + + Documentation message + + + + + Gets the error message. + + + + + + + Expectation that matchs any arguments for the method. + + + + + Creates a new instance. + + Invocation for this expectation + + + + Creates a new instance. + + Expectation. + + + + Validate the arguments for the method. + + The arguments with which the method was called + + + + Determines if the object equal to expectation + + + + + Get the hash code + + + + + Gets the error message. + + + + + + + Summary description for ArgsEqualExpectation. + + + + + Creates a new instance. + + Expected args. + The invocation for this expectation + + + + Validate the arguments for the method. + + The arguments with which the method was called + + + + Determines if the object equal to expectation + + + + + Get the hash code + + + + + Gets the error message. + + + + + + + Get the expected args. + + + + + Call a specified callback to verify the expectation + + + + + Creates a new instance. + + Expectation. + Callback. + + + + Creates a new instance. + + Invocation for this expectation + Callback. + + + + Validate the arguments for the method on the child methods + + The arguments with which the method was called + + + + Determines if the object equal to expectation + + + + + Get the hash code + + + + + Gets the error message. + + + + + + + Expect the method's arguments to match the contraints + + + + + Creates a new instance. + + Invocation for this expectation + Constraints. + + + + Creates a new instance. + + Expectation. + Constraints. + + + + Validate the arguments for the method. + + The arguments with which the method was called + + + + Determines if the object equal to expectation + + + + + Get the hash code + + + + + Gets the error message. + + + + + + + Log expectations - allows to see what is going on inside Rhino Mocks + + + + + Logs the expectation as is was recorded + + The invocation. + The expectation. + + + + Logs the expectation as it was recorded + + The invocation. + The expectation. + + + + Logs the unexpected method call. + + The invocation. + The message. + + + + Doesn't log anything, just makes happy noises + + + + + Operation on a remoting proxy + + + It is not possible to directly communicate to a real proxy via transparent proxy. + Transparent proxy impersonates a user type and only methods of that user type are callable. + The only methods that are guaranteed to exist on any transparent proxy are methods defined + in Object: namely ToString(), GetHashCode(), and Equals()). + + These three methods are the only way to tell the real proxy to do something. + Equals() is the most suitable of all, since it accepts an arbitrary object parameter. + The RemotingProxy code is built so that if it is compared to an IRemotingProxyOperation, + transparentProxy.Equals(operation) will call operation.Process(realProxy). + This way we can retrieve a real proxy from transparent proxy and perform + arbitrary operation on it. + + + + + Generates remoting proxies and provides utility functions + + + + + Create the proxy using remoting + + + + + Check whether an object is a transparent proxy with a RemotingProxy behind it + + Object to check + true if the object is a transparent proxy with a RemotingProxy instance behind it, false otherwise + We use Equals() method to communicate with the real proxy behind the object. + See IRemotingProxyOperation for more details + + + + Retrieve a mocked object from a transparent proxy + + Transparent proxy with a RemotingProxy instance behind it + Mocked object associated with the proxy + We use Equals() method to communicate with the real proxy behind the object. + See IRemotingProxyOperation for more details + + + + Implementation of IInvocation based on remoting proxy + + Some methods are marked NotSupported since they either don't make sense + for remoting proxies, or they are never called by Rhino Mocks + + + + Rudimetry implementation that simply logs methods calls as text. + + + + + Initializes a new instance of the class. + + The writer. + + + + Logs the expectation as is was recorded + + The invocation. + The expectation. + + + + Logs the expectation as it was recorded + + The invocation. + The expectation. + + + + Logs the unexpected method call. + + The invocation. + The message. + + + + Different actions on this mock + + + + + Add a method call for this state' mock. + + The invocation for this method + The method that was called + The arguments this method was called with + + + + Verify that this mock expectations have passed. + + + + + Verify that we can move to replay state and move + to the reply state. + + + + + Gets a mock state that match the original mock state of the object. + + + + + Get the options for the last method call + + + + + Set the exception to throw when Verify is called. + This is used to report exception that may have happened but where caught in the code. + This way, they are reported anyway when Verify() is called. + + + + + Gets the matching verify state for this state + + + + + Get the options for the last method call + + + + + Records all the expectations for a mock + + + + + Get the options for the last method call + + + + + Set the exception to throw when Verify is called. + This is used to report exception that may have happened but where caught in the code. + This way, they are reported anyway when Verify() is called. + + + + + Creates a new instance. + + Repository. + The proxy that generates the method calls + + + + Add a method call for this state' mock. + + The invocation for this method + The method that was called + The arguments this method was called with + + + + Verify that we can move to replay state and move + to the reply state. + + + + + Verify that we can move to replay state and move + to the reply state. + + + + + Verify that this mock expectations have passed. + + + + + Gets a mock state that match the original mock state of the object. + + + + + Asserts the previous method is closed (had an expectation set on it so we can replay it correctly) + + + + + Gets the last expectation. + + + + + Gets the total method calls count. + + + + + Get the options for the last method call + + + + + Gets the matching verify state for this state + + + + + Behave like a stub, all properties and events acts normally, methods calls + return default values by default (but can use expectations to set them up), etc. + + + + + Initializes a new instance of the class. + + The proxy that generates the method calls + Repository. + + + + We don't care much about expectations here, so we will remove the exepctation if + it is not closed. + + + + + Verify that we can move to replay state and move + to the reply state. + + + + + + + Validate all expectations on a mock + + + + + The repository for this state + + + + + The proxy object for this state + + + + + Get the options for the last method call + + + + + Creates a new instance. + + The previous state for this method + + + + Add a method call for this state' mock. + + The invocation for this method + The method that was called + The arguments this method was called with + + + + Add a method call for this state' mock. + This allows derived method to cleanly get a the setupresult behavior while adding + their own. + + The invocation for this method + The method that was called + The arguments this method was called with + + + + Set the exception to throw when Verify is called. + This is used to report exception that may have happened but where caught in the code. + This way, they are reported anyway when Verify() is called. + + + + + Verify that this mock expectations have passed. + + + + + Verify that we can move to replay state and move + to the reply state. + + + + + Gets a mock state that match the original mock state of the object. + + + + + Get the options for the last method call + + + + + Gets the matching verify state for this state + + + + + Validate expectations on recorded methods, but in general completely ignoring them. + Similar to except that it would return a + when BackToRecord is called. + + + + + Initializes a new instance of the class. + + The previous state for this method + + + + Add a method call for this state' mock. + + The invocation for this method + The method that was called + The arguments this method was called with + + + + Gets a mock state that match the original mock state of the object. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Marker interface used to indicate that this is a partial mock. + + + + + Options for CallOriginalMethod + + + + + No expectation is created, the method will be called directly + + + + + Normal expectation is created, but when the method is later called, it will also call the original method + + + + + Adds optional new usage: + using(mockRepository.Record()) { + Expect.Call(mock.Method()).Return(retVal); + } + using(mockRepository.Playback()) { + // Execute code + } + N.B. mockRepository.ReplayAll() and mockRepository.VerifyAll() + calls are taken care of by Record/Playback + + + Creates proxied instances of types. + + + + + Delegate: CreateMockState + This is used internally to cleanly handle the creation of different + RecordMockStates. + + + + + This is used to record the last repository that has a method called on it. + + + + + this is used to get to the last proxy on this repository. + + + + + For mock delegates, maps the proxy instance from intercepted invocations + back to the delegate that was originally returned to client code, if any. + + + + + All the proxies in the mock repositories + + + + + This is here because we can't put it in any of the recorders, since repeatable methods + have no orderring, and if we try to handle them using the usual manner, we would get into + wierd situations where repeatable method that was defined in an orderring block doesn't + exists until we enter this block. + + + + + + + + + + + + + + + + + Creates a new instance. + + + + + Move the repository to ordered mode + + + + + Move the repository to un-ordered mode + + + + + Creates a mock for the specified type. + + Type. + Arguments for the class' constructor, if mocking a concrete class + + + + Creates a mock from several types, with strict semantics. + Only may be a class. + + + + + Creates a mock from several types, with strict semantics. + Only may be a class. + + The main type to mock. + Extra interface types to mock. + Arguments for the class' constructor, if mocking a concrete class. + + + + Creates a mock from several types, with dynamic semantics. + Only may be a class. + + The main type to mock. + Extra interface types to mock. + + + + Creates a mock from several types, with dynamic semantics. + Only may be a class. + + The main type to mock. + Extra interface types to mock. + Arguments for the class' constructor, if mocking a concrete class. + + + + Creates a dynamic mock for the specified type. + + Type. + Arguments for the class' constructor, if mocking a concrete class + + + + Creates a mock object that defaults to calling the class methods. + + Type. + Arguments for the class' constructor. + + + + Creates a mock object that defaults to calling the class methods. + + Type. + Extra interface types to mock. + + + + Creates a mock object that defaults to calling the class methods. + + Type. + Extra interface types to mock. + Arguments for the class' constructor. + + + + Creates a mock object using remoting proxies + + Type to mock - must be MarshalByRefObject + Mock object + Proxy mock can mock non-virtual methods, but not static methods + Creates the mock state for this proxy + + + + Cause the mock state to change to replay, any further call is compared to the + ones that were called in the record state. + + the object to move to replay state + + + + Move the mocked object back to record state. + Will delete all current expectations! + + + + + Move the mocked object back to record state. + Will delete all current expectations, but allows more granularity about how + it would behave with regard to the object state. + + + + + Verify that all the expectations for this object were fulfilled. + + the object to verify the expectations for + + + + Get the method options for the last call on + mockedInstance. + + The mock object + Method options for the last call + + + + Maps an invocation proxy back to the mock object instance that was originally + returned to client code which might have been a delegate to this proxy. + + The mock object proxy from the intercepted invocation + The mock object + + + + This is provided to allow advance extention functionality, where Rhino Mocks standard + functionality is not enough. + + The type to mock + Delegate that create the first state of the mocked object (usualy the record state). + Additional types to be implemented, this can be only interfaces + optional arguments for the constructor + + + + + + Method: GetMockedObject + Get an IProxy from a mocked object instance, or throws if the + object is not a mock object. + + + + + Method: GetMockedObjectOrNull + Get an IProxy from a mocked object instance, or null if the + object is not a mock object. + + + + + Pops the recorder. + + + + + Pushes the recorder. + + New recorder. + + + + All the mock objects in this repository will be moved + to record state. + + + + + All the mock objects in this repository will be moved + to record state. + + + + + Replay all the mocks from this repository + + + + + Verify all the mocks from this repository + + + + + Set the exception to be thrown when verified is called. + + + + + Creates a mock for the spesified type. + + Arguments for the class' constructor, if mocking a concrete class + + + + Creates a dynamic mock for the specified type. + + Arguments for the class' constructor, if mocking a concrete class + + + + Creates a mock object from several types. + + + + + Create a mock object from several types with dynamic semantics. + + + + + Create a mock object from several types with partial semantics. + + + + + Create a mock object from several types with strict semantics. + + Extra interface types to mock. + Arguments for the class' constructor, if mocking a concrete class + + + + Create a mock object from several types with dynamic semantics. + + Extra interface types to mock. + Arguments for the class' constructor, if mocking a concrete class + + + + Create a mock object from several types with partial semantics. + + Extra interface types to mock. + Arguments for the class' constructor, if mocking a concrete class + + + + Create a mock object with from a class that defaults to calling the class methods + + Arguments for the class' constructor, if mocking a concrete class + + + + Create a stub object, one that has properties and events ready for use, and + can have methods called on it. It requires an explicit step in order to create + an expectation for a stub. + + The arguments for constructor. + + + + Create a stub object, one that has properties and events ready for use, and + can have methods called on it. It requires an explicit step in order to create + an expectation for a stub. + + The type. + The arguments for constructor. + + + + + + Generates a stub without mock repository + + The arguments for constructor. + + + + + + Generates the stub without mock repository + + The type. + The arguments for constructor. + + + + Gets the recorder. + + + + + + + Gets the replayer for this repository. + + + + + + + Gets the last proxy which had a method call. + + + + + Utility class for dealing with messing generics scenarios. + + + + + There are issues with trying to get this to work correctly with open generic types, since this is an edge case, + I am letting the runtime handle it. + + + + + Gets the real type, including de-constructing and constructing the type of generic + methods parameters. + + The type. + The invocation. + + + + + + Because we need to support complex types here (simple generics were handled above) we + need to be aware of the following scenarios: + List[T] and List[Foo[T]] + + + + + ExpectationsList + + + + + Dictionary + + + + + Dictionary class + + + + + Create a new instance of ProxyStateDictionary + + + + Interface to allows to call a method and immediatly get it's options. + + + + + Get the method options for the call + + The method call should go here, the return value is ignored + + + + Allows to call a method and immediatly get it's options. + + + + + Creates a new instance. + + + + + Get the method options for the call + + The method call should go here, the return value is ignored + + + + Allows to call a method and immediatly get it's options. + Set the expected number for the call to Any() + + + + + Creates a new instance. + + Proxy. + Mocked instance. + + + + Get the method options for the call + + The method call should go here, the return value is ignored + + + + This class is reponsible for taking a delegate and creating a wrapper + interface around it, so it can be mocked. + + + + + The scope for all the delegate interfaces create by this mock repositroy. + + + + + Gets a type with an "Invoke" method suitable for use as a target of the + specified delegate type. + + + + + + + + + Raise events for all subscribers for an event + + + + + Raise the event + + + + + The most common form for the event handler signature + + + + + Raise events for all subscribers for an event + + + + + Create an event raise for the specified event on this instance. + + + + + Creates a new instance of EventRaiser + + + + Raise the event + + + + + The most common signature for events + Here to allow intellisense to make better guesses about how + it should suggest parameters. + + + + + Allows to define what would happen when a method + is called. + + + + + Set the return value for the method. + + The object the method will return + IRepeat that defines how many times the method will return this value + + + + Throws the specified exception when the method is called. + + Exception to throw + + + + Ignores the arguments for this method. Any argument will be matched + againt this method. + + + + + Add constraints for the method's arguments. + + + + + Set a callback method for the last call + + + + + Set a delegate to be called when the expectation is matched. + The delegate return value will be returned from the expectation. + + + + + Call the original method on the class, bypassing the mocking layers. + + + + + + + Call the original method on the class, optionally bypassing the mocking layers. + + + + + + + Use the property as a simple property, getting/setting the values without + causing mock expectations. + + + + + Get an event raiser for the last subscribed event. + + + + + Set the parameter values for out and ref parameters. + This is done using zero based indexing, and _ignoring_ any non out/ref parameter. + + + + + Documentation message for the expectation + + Message + + + + Better syntax to define repeats. + + + + + Allows to specify the number of time for method calls + + + + + Repeat the method twice. + + + + + Repeat the method once. + + + + + Repeat the method at least once, then repeat as many time as it would like. + + + + + Repeat the method any number of times. + This has special affects in that this method would now ignore orderring. + + + + + Set the range to repeat an action. + + Min. + Max. + + + + Set the amount of times to repeat an action. + + + + + This method must not appear in the replay state. + This has special affects in that this method would now ignore orderring. + + + + + Allows to define what would happen when a method + is called. + + + + + Creates a new instance. + + the repository for this expectation + the recorder for this proxy + the proxy for this expectation + Expectation. + + + + Add constraints for the method's arguments. + + + + + Set a callback method for the last call + + + + + Set a delegate to be called when the expectation is matched. + The delegate return value will be returned from the expectation. + + + + + Set the return value for the method. + + The object the method will return + IRepeat that defines how many times the method will return this value + + + + Throws the specified exception when the method is called. + + Exception to throw + + + + Ignores the arguments for this method. Any argument will be matched + againt this method. + + + + + Call the original method on the class, bypassing the mocking layers. + + + + + + + Call the original method on the class, optionally bypassing the mocking layers + + + + + + + Use the property as a simple property, getting/setting the values without + causing mock expectations. + + + + + Gets the event raiser for the last event + + + + + Set the parameter values for out and ref parameters. + This is done using zero based indexing, and _ignoring_ any non out/ref parameter. + + + + + Repeat the method twice. + + + + + Repeat the method once. + + + + + Repeat the method at least once, then repeat as many time as it would like. + + + + + This method must not appear in the replay state. + + + + + Documentation message for the expectation + + Message + + + + Repeat the method any number of times. + + + + + Set the range to repeat an action. + + Min. + Max. + + + + Set the amount of times to repeat an action. + + + + + Better syntax to define repeats. + + + + + This class will provide hash code for hashtables without needing + to call the GetHashCode() on the object, which may very well be mocked. + This class has no state so it is a singelton to avoid creating a lot of objects + that does the exact same thing. See flyweight patterns. + + + + + Get the hash code for a proxy object without calling GetHashCode() + on the object. + + + + + Compares two instances of mocked objects + + + + + Compare two mocked objects + + + + + The next hash code value for a mock object. + This is safe for multi threading. + + + + + The sole instance of + + + + Interface to find the repository of a mocked object + + + + + Return true if it should call the original method on the object + instead of pass it to the message chain. + + The method to call + + + + Register a method to be called on the object directly + + + + + Register a property on the object that will behave as a simple property + + + + + Check if the method was registered as a property method. + + + + + Do get/set on the property, according to need. + + + + + Do add/remove on the event + + + + + Get the subscribers of a spesific event + + + + + Gets the declaring type of the method, taking into acccount the possible generic + parameters that it was created with. + + + + + Clears the state of the object, remove original calls, property behavior, subscribed events, etc. + + + + + The unique hash code of this mock, which is not related + to the value of the GetHashCode() call on the object. + + + + + Gets the repository. + + + + + Gets the implemented types by this mocked object + + The implemented. + + + + This is a dummy type that is used merely to give DynamicProxy the proxy instance that + it needs to create IProxy's types. + + + + + Create a new instance of + + + + Return true if it should call the original method on the object + instead of pass it to the message chain. + + The method to call + + + + Register a method to be called on the object directly + + + + + Register a property on the object that will behave as a simple property + + + + + Check if the method was registered as a property method. + + + + + Do get/set on the property, according to need. + + + + + Do add/remove on the event + + + + + Get the subscribers of a spesific event + + + + + Gets the declaring type of the method, taking into acccount the possible generic + parameters that it was created with. + + + + + Clears the state of the object, remove original calls, property behavior, subscribed events, etc. + + + + + The unique hash code of this proxy, which is not related + to the value of the GetHashCode() call on the object. + + + + + Gets the repository. + + + + + Gets the implemented types by this mocked object + + The implemented. + + + + Range for expected method calls + + + + + Creates a new instance. + + Min. + Max. + + + + Return the string representation of this range. + + + + + Gets or sets the min. + + + + + + + Gets or sets the max. + + + + + + + Records all the expectations for a mock and + return a ReplayDynamicMockState when Replay() + is called. + + + + + Creates a new instance. + + Repository. + The proxy that generates the method calls + + + + Verify that we can move to replay state and move + to the reply state. + + + + + Gets a mock state that match the original mock state of the object. + + + + + Records all the expectations for a mock and + return a ReplayPartialMockState when Replay() + is called. + + + + + Creates a new instance. + + Repository. + The proxy that generates the method calls + + + + Verify that we can move to replay state and move + to the reply state. + + + + + Gets a mock state that match the original mock state of the object. + + + + + Options for special repeat option + + + + + This method can be called only as many times as the IMethodOptions.Expect allows. + + + + + This method should never be called + + + + + This method can be call any number of times + + + + + This method will call the original method + + + + + This method will call the original method, bypassing the mocking layer + + + + + This method will simulate simple property behavior + + + + + Validate all expectations on a mock and ignores calls to + any method that was not setup properly. + + + + + Creates a new instance. + + The previous state for this method + + + + Add a method call for this state' mock. + + The invocation for this method + The method that was called + The arguments this method was called with + + + + Gets a mock state that match the original mock state of the object. + + + + + Validate all expectations on a mock and ignores calls to + any method that was not setup properly. + + + + + Creates a new instance. + + The previous state for this method + + + + Add a method call for this state' mock. + + The invocation for this method + The method that was called + The arguments this method was called with + + + + Gets a mock state that match the original mock state of the object. + + + + + Summary description for RhinoInterceptor. + + + + + Creates a new instance. + + + + + Intercept a method call and direct it to the repository. + + + + + Validate arguments for methods + + + + + Validate that the passed argument is not null. + + The object to validate + The name of the argument + + If the obj is null, an ArgumentNullException with the passed name + is thrown. + + + + + Validate that the arguments are equal. + + Expected args. + Actual Args. + + + + Validate that the two argument are equals, including validation for + when the arguments are collections, in which case it will validate their values. + + + + + This method is safe for use even if any of the objects is a mocked object + that override equals. + + + + + Throw an object already verified when accessed + + + + + Create a new instance of VerifiedMockState + + The previous mock state, used to get the initial record state + + + + Add a method call for this state' mock. + + The invocation for this method + The method that was called + The arguments this method was called with + + + + Verify that this mock expectations have passed. + + + + + Verify that we can move to replay state and move + to the reply state. + + + + + Gets a mock state that match the original mock state of the object. + + + + + Get the options for the last method call + + + + + Set the exception to throw when Verify is called. + This is used to report exception that may have happened but where caught in the code. + This way, they are reported anyway when Verify() is called. + + + + + Gets the matching verify state for this state + + + + + Get the options for the last method call + + + + + Records the actions on all the mocks created by a repository. + + + + + Records the specified call with the specified args on the mocked object. + + + + + Get the expectation for this method on this object with this arguments + + + + + This check the methods that were setup using the SetupResult.For() + or LastCall.Repeat.Any() and that bypass the whole expectation model. + + + + + Gets the all expectations for a mocked object and method combination, + regardless of the expected arguments / callbacks / contraints. + + Mocked object. + Method. + List of all relevant expectation + + + + Gets the all expectations for proxy. + + Mocked object. + List of all relevant expectation + + + + Removes all the repeatable expectations for proxy. + + Mocked object. + + + + Replaces the old expectation with the new expectation for the specified proxy/method pair. + This replace ALL expectations that equal to old expectations. + + Proxy. + Method. + Old expectation. + New expectation. + + + + Adds the recorder and turn it into the active recorder. + + Recorder. + + + + Moves to previous recorder. + + + + + Gets the recorded expectation or null. + + + + + Gets the next expected calls string. + + + + + Moves to parent recorder. + + + + + Set the expectation so it can repeat any number of times. + + + + + Removes the expectation from the recorder + + + + + Clear the replayer to call (and all its chain of replayers) + This also removes it from the list of expectations, so it will never be considered again + + + + + Get the expectation for this method on this object with this arguments + + + + + Gets a value indicating whether this instance has expectations that weren't satisfied yet. + + + true if this instance has expectations; otherwise, false. + + + + + Allows to set various options for the last method call on + a specified object. + If the method has a return value, it's recommended to use Expect + + + + + Allows to get an interface to work on the last call. + + The mocked object + Interface that allows to set options for the last method call on this object + + + + Set the return value for the method. + + The object the method will return + IRepeat that defines how many times the method will return this value + + + + Set the return value for the method. This overload is needed for LastCall.Return(null) + + The object the method will return + IRepeat that defines how many times the method will return this value + + + + Throws the specified exception when the method is called. + + Exception to throw + + + + Ignores the arguments for this method. Any argument will be matched + againt this method. + + + + + Add constraints for the method's arguments. + + + + + Set a callback method for the last call + + + + + Call the original method on the class, bypassing the mocking layers, for the last call. + + + + + Call the original method on the class, optionally bypassing the mocking layers, for the last call. + + + + + Set a delegate to be called when the expectation is matched. + The delegate return value will be returned from the expectation. + + + + + Gets an interface that will raise the last event when called. + + + + + Set the parameter values for out and ref parameters. + This is done using zero based indexing, and _ignoring_ any non out/ref parameter. + + + + + Documentation message for the expectation + + Message + + + + Use the property as a simple property, getting/setting the values without + causing mock expectations. + + + + + Better syntax to define repeats. + + + + + Base class for method recorders, handle delegating to inner recorder if needed. + + + + + List of the expected actions on for this recorder + The legal values are: + * Expectations + * Method Recorders + + + + + The current recorder. + + + + + The current replayer; + + + + + The parent recorder of this one, may be null. + + + + + This contains a list of all the replayers that should be ignored + for a spesific method call. A replayer gets into this list by calling + ClearReplayerToCall() on its parent. This list is Clear()ed on each new invocation. + + + + + All the repeatable methods calls. + + + + + Counts the recursion depth of the current expectation search stack + + + + + Creates a new instance. + + + + + Creates a new instance. + + Parent recorder. + Repeatable methods + + + + Records the specified call with the specified args on the mocked object. + + + + + Get the expectation for this method on this object with this arguments + + + + + Gets the all expectations for a mocked object and method combination, + regardless of the expected arguments / callbacks / contraints. + + Mocked object. + Method. + List of all relevant expectation + + + + Gets the all expectations for proxy. + + Mocked object. + List of all relevant expectation + + + + Replaces the old expectation with the new expectation for the specified proxy/method pair. + This replace ALL expectations that equal to old expectations. + + Proxy. + Method. + Old expectation. + New expectation. + + + + Remove the all repeatable expectations for proxy. + + Mocked object. + + + + Set the expectation so it can repeat any number of times. + + + + + Removes the expectation from the recorder + + + + + Adds the recorder and turn it into the active recorder. + + Recorder. + + + + Moves to previous recorder. + + + + + Moves to parent recorder. + + + + + Gets the recorded expectation or null. + + + + + Clear the replayer to call (and all its chain of replayers). + This also removes it from the list of expectations, so it will never be considered again + + + + + Get the expectation for this method on this object with this arguments + + + + + Gets the next expected calls string. + + + + + Handles the real getting of the recorded expectation or null. + + + + + Handle the real execution of this method for the derived class + + + + + Handle the real execution of this method for the derived class + + + + + Handle the real execution of this method for the derived class + + + + + Handle the real execution of this method for the derived class + + + + + Handle the real execution of this method for the derived class + + + + + Handle the real execution of this method for the derived class + + + + + Should this replayer be considered valid for this call? + + + + + This check the methods that were setup using the SetupResult.For() + or LastCall.Repeat.Any() and that bypass the whole expectation model. + + + + + Gets a value indicating whether this instance has expectations that weren't satisfied yet. + + + true if this instance has expectations; otherwise, false. + + + + + Handle the real execution of this method for the derived class + + + + + Unordered collection of method records, any expectation that exist + will be matched. + + + + + The parent recorder we have redirected to. + Useful for certain edge cases in orderring. + See: FieldProblem_Entropy for the details. + + + + + Creates a new instance. + + Parent recorder. + Repeatable methods + + + + Creates a new instance. + + + + + Records the specified call with the specified args on the mocked object. + + Mocked object. + Method. + Expectation. + + + + Get the expectation for this method on this object with this arguments + + Invocation for this method + Mocked object. + Method. + Args. + True is the call was recorded, false otherwise + + + + Gets the all expectations for a mocked object and method combination, + regardless of the expected arguments / callbacks / contraints. + + Mocked object. + Method. + List of all relevant expectation + + + + Gets the all expectations for proxy. + + Mocked object. + List of all relevant expectation + + + + Replaces the old expectation with the new expectation for the specified proxy/method pair. + This replace ALL expectations that equal to old expectations. + + Proxy. + Method. + Old expectation. + New expectation. + + + + Handle the real execution of this method for the derived class + + + + + Handles the real getting of the recorded expectation or null. + + + + + Handle the real execution of this method for the derived class + + + + + Gets the next expected calls string. + + + + + Create an exception for an unexpected method call. + + + + + Gets a value indicating whether this instance has expectations that weren't satisfied yet. + + + true if this instance has expectations; otherwise, false. + + + + + Ordered collection of methods, methods must arrive in specified order + in order to pass. + + + + + Creates a new instance. + + Parent recorder. + Repetable methods + + + + Creates a new instance. + + + + + Handles the real getting of the recorded expectation or null. + + + + + Get the expectation for this method on this object with this arguments + + + + + Gets the next expected calls string. + + + + + Hold an expectation for a method call on an object + + + + + Creates a new instance. + + Proxy. + Method. + Expectation. + + + + Determains if the object equal to this instance + + Obj. + + + + + + Gets the hash code. + + + + + + + Gets the proxy. + + + + + + + Gets the method. + + + + + + + Gets the expectation. + + + + + + + Holds a pair of mocked object and a method + and allows to compare them against each other. + This allows us to have a distinction between mockOne.MyMethod() and + mockTwo.MyMethod()... + + + + + Creates a new instance. + + Proxy. + Method. + + + + Determains whatever obj equals to this instance. + ProxyMethodPairs are equals when they point to the same /instance/ of + an object, and to the same method. + + Obj. + + + + + + Gets the hash code. + + + + + + + Gets the proxy. + + + + + + + Gets the method. + + + + + + + Change the recorder from ordered to unordered and vice versa + + + + + Creates a new instance. + + + + + Disposes this instance. + + + + + Accessor for the current mocker + + + + + The current mocker + + + + + Used for [assembly: InternalsVisibleTo(RhinoMocks.StrongName)] + Used for [assembly: InternalsVisibleTo(RhinoMocks.NormalName)] + + + + + Strong name for the Dynamic Proxy assemblies. Used for InternalsVisibleTo specification. + + + + + Normal name for dynamic proxy assemblies. Used for InternalsVisibleTo specification. + + + + + Logs all method calls for methods + + + + + Setup method calls to repeat any number of times. + + + + + Get the method options and set the last method call to repeat + any number of times. + This also means that the method would transcend ordering + + + + + Get the method options for the last method call on the mockInstance and set it + to repeat any number of times. + This also means that the method would transcend ordering + + + + + Utility class for working with method calls. + + + + + Delegate to format the argument for the string representation of + the method call. + + + + + Return the string representation of a method call and its arguments. + + The method + The method arguments + Invocation of the method, used to get the generics arguments + Delegate to format the parameter + The string representation of this method call + + + + Return the string representation of a method call and its arguments. + + The invocation of the method, used to get the generic parameters + The method + The method arguments + The string representation of this method call + + + + Utility to get the default value for a type + + + + + The default value for a type. + Null for reference types and void + 0 for value types. + First element for enums + Note that we need to get the value even for opened generic types, such as those from + generic methods. + + Type. + The invocation. + the default value + + + + Allows easier access to MockRepository, works closely with Mocker.Current to + allow access to a context where the mock repository is automatially verified at + the end of the code block. + + + + + A method with no arguments and no return value that will be called under the mock context. + + + + + Interface to verify previously defined expectations + + + + + Verifies if a piece of code + + + + + FluentMocker implements some kind of fluent interface attempt + for saying "With the Mocks [mocks], Expecting (in same order) [things] verify [that]." + + + + + Defines unordered expectations + + A delegate describing the expectations + an IMockVerifier + + + + Defines ordered expectations + + A delegate describing the expectations + an IMockVerifier + + + + Verifies previously defined expectations + + + + + Initialize a code block where Mocker.Current is initialized. + At the end of the code block, all the expectation will be verified. + This overload will create a new MockRepository. + + The code that will be executed under the mock context + + + + Initialize a code block where Mocker.Current is initialized. + At the end of the code block, all the expectation will be verified. + This overload will create a new MockRepository. + + The mock repository to use, at the end of the code block, VerifyAll() will be called on the repository. + The code that will be executed under the mock context + + + + Create a FluentMocker + + The mock repository to use. + + + + Wraps a reference that is passed + ByRef and provides indirect load/store support. + + + + + Summary description for NewArrayExpression. + + + + + + + + + Here we try to match a constructor argument to its value. + Since we can't get the values from the assembly, we use some heuristics to get it. + a/ we first try to match all the properties on the attributes by name (case insensitive) to the argument + b/ if we fail we try to match them by property type, with some smarts about convertions (i,e: can use Guid for string). + + + + + We have the following rules here. + Try to find a matching type, failing that, if the parameter is string, get the first property (under the assumption that + we can convert it. + + + + + Attributes can only accept simple types, so we return null for null, + if the value is passed as string we call to string (should help with converting), + otherwise, we use the value as is (enums, integer, etc). + + + + + Provides appropriate Ldc.X opcode for the type of primitive value to be loaded. + + + + + Provides appropriate Ldind.X opcode for + the type of primitive value to be loaded indirectly. + + + + + Inspect the base method for generic definitions + and set the return type and the parameters + accordingly + + + + + Emits a load opcode of the appropriate kind for a constant string or + primitive value. + + + + + + + + + Emits a load opcode of the appropriate kind for the constant default value of a + type, such as 0 for value types and null for reference types. + + + + + Emits a load indirect opcode of the appropriate type for a value or object reference. + Pops a pointer off the evaluation stack, dereferences it and loads + a value of the specified type. + + + + + + + + + Emits a store indirectopcode of the appropriate type for a value or object reference. + Pops a value of the specified type and a pointer off the evaluation stack, and + stores the value. + + + + + + + + + Summary description for PropertiesCollection. + + + + + Provides appropriate Stind.X opcode + for the type of primitive value to be stored indirectly. + + + + + Base class that exposes the common functionalities + to proxy generation. + + + TODO: + - Use the interceptor selector if provided + - Add tests and fixes for 'leaking this' problem + - Mixin support + + + + + Used by dinamically implement + + + + + + Generates a parameters constructor that initializes the proxy + state with just to make it non-null. + + This constructor is important to allow proxies to be XML serializable + + + + + If callbackMethod is null the InvokeOnTarget implementation + is just the code to throw an exception + + + + + + + + + + + + + + + + + + + If callbackMethod is null the InvokeOnTarget implementation + is just the code to throw an exception + + + + + + + + + + + + + + If true the invocation will implement the IChangeProxyTarget interface + + + + + + Generates the constructor for the nested class that extends + + + + + + + + + + + + + Improvement: this cache should be static. We should generate a + type constructor instead + + + + + Performs some basic screening and invokes the + to select methods. + + + + + + + + + + + Checks if the method is public or protected. + + + + + + + + + Attributes should be replicated if they are non-inheritable, + but there are some special cases where the attributes means + something to the CLR, where they should be skipped. + + + + + Checks if the method has the same signature as a method that was marked as + one that should generate a new vtable slot. + + + + + Initializes a new instance of the class. + + Type of the target. + The interfaces. + The options. + + + + + + + + Initializes a new instance of the class. + + The emitter. + The add method. + The remove method. + The attributes. + + + + + + + + Finds the type of the method on target. + + The method on interface. + Type of the proxy target. + + + + + + Checks whether the given types are the same. This is + more complicated than it looks. + + + + + + + + + + + This is used by the ProxyObjectReference class durin de-serialiation, to know + which generator it should use + + + + + Returns the methods implemented by a type. Use this instead of Type.GetMethods() to work around a CLR issue + where duplicate MethodInfos are returned by Type.GetMethods() after a token of a generic type's method was loaded. + + + + + Handles the deserialization of proxies. + + + + + Usefull for test cases + + + + + Used during the target type inspection process. + Implementors have a chance to interfere in the + proxy generation process + + + + + Invoked by the generation process to know if + the specified member should be proxied + + + + + + + + + + + Invoked by the generation process to notify that a + member wasn't marked as virtual. + + + + + + + + + Invoked by the generation process to notify + that the whole process is completed. + + + + + Abstracts the implementation of proxy constructions + + + + + Implementors should return a proxy for the specified type. + + The proxy base class. + The proxy generation options. + The generated proxy type. + + + + Implementors should return a proxy for the specified + type and interfaces. The interfaces must be only "mark" interfaces + + + + + + + + + + + + + Implementors should return a proxy for the specified + interface that 'proceeds' executions to the + specified target. + + + + + + + + + + + + + + + Implementors should return a proxy for the specified + interface that delegate all executions to the + specified interceptor(s). + + + + + + + + + + + + + Implementors should return a proxy for the specified + interface that delegate all executions to the + specified interceptor(s) and uses an instance of the interface + as their targets, rather than a class. All IInvocation's + should then implement IChangeProxyTarget. + + + + + + + + + + + Gets the module scope used by this builder for generating code. + + The module scope used by this builder. + + + + Determines whether this assembly has internals visisble to dynamic proxy. + + The asm. + + + + Determines whether the specified method is internal. + + The method. + + true if the specified method is internal; otherwise, false. + + + + + Summary description for ModuleScope. + + + + + The default file name used when the assembly is saved using . + + + + + The default assembly (simple) name used for the assemblies generated by a instance. + + + + + Initializes a new instance of the class; assemblies created by this instance will not be saved. + + + + + Initializes a new instance of the class, allowing to specify whether the assemblies generated by this instance + should be saved. + + If set to true saves the generated module. + + + + Initializes a new instance of the class, allowing to specify whether the assemblies generated by this instance + should be saved and what simple names are to be assigned to them. + + If set to true saves the generated module. + The simple name of the strong-named assembly generated by this . + The path and file name of the manifest module of the strong-named assembly generated by this . + The simple name of the weak-named assembly generated by this . + The path and file name of the manifest module of the weak-named assembly generated by this . + + + + Returns a type from this scope's type cache, or null if the key cannot be found. + + The key to be looked up in the cache. + The type from this scope's type cache matching the key, or null if the key cannot be found + + + + Registers a type in this scope's type cache. + + The key to be associated with the type. + The type to be stored in the cache. + + + + Gets the key pair used to sign the strong-named assembly generated by this . + + + + + + + Gets the specified module generated by this scope, creating a new one if none has yet been generated. + + If set to true, a strong-named module is returned; otherwise, a weak-named module is returned. + A strong-named or weak-named module generated by this scope, as specified by the parameter. + + + + Gets the strong-named module generated by this scope, creating a new one if none has yet been generated. + + A strong-named module generated by this scope. + + + + Gets the weak-named module generated by this scope, creating a new one if none has yet been generated. + + A weak-named module generated by this scope. + + + + Saves the generated assembly with the name and directory information given when this instance was created (or with + the and current directory if none was given). + + + + This method stores the generated assembly in the directory passed as part of the module information specified when this instance was + constructed (if any, else the current directory is used). If both a strong-named and a weak-named assembly + have been generated, it will throw an exception; in this case, use the overload. + + + If this was created without indicating that the assembly should be saved, this method does nothing. + + + Both a strong-named and a weak-named assembly have been generated or no assembly has been + generated. + + + + Saves the specified generated assembly with the name and directory information given when this instance was created + (or with the and current directory if none was given). + + True if the generated assembly with a strong name should be saved (see ); + false if the generated assembly without a strong name should be saved (see . + + + This method stores the specified generated assembly in the directory passed as part of the module information specified when this instance was + constructed (if any, else the current directory is used). + + + If this was created without indicating that the assembly should be saved, this method does nothing. + + + No assembly has been generated that matches the parameter. + + + + + Users of this should use this lock when accessing the cache. + + + + + Gets the strong-named module generated by this scope, or if none has yet been generated. + + The strong-named module generated by this scope, or if none has yet been generated. + + + + Gets the file name of the strongly named module generated by this scope. + + The file name of the strongly named module generated by this scope. + + + + Gets the directory where the strongly named module generated by this scope will be saved, or if the current directory + is used. + + The directory where the strongly named module generated by this scope will be saved when is called + (if this scope was created to save modules). + + + + Gets the weak-named module generated by this scope, or if none has yet been generated. + + The weak-named module generated by this scope, or if none has yet been generated. + + + + Gets the file name of the weakly named module generated by this scope. + + The file name of the weakly named module generated by this scope. + + + + Gets the directory where the weakly named module generated by this scope will be saved, or if the current directory + is used. + + The directory where the weakly named module generated by this scope will be saved when is called + (if this scope was created to save modules). + + + + ProxyBuilder that persists the generated type. + + + The saved assembly contains just the last generated type. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The hook. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The builder. + + + + Initializes a new instance of the class. + + + + + Creates the class proxy. + + Type of the target. + The interfaces. + The interceptors. + + + + + + Creates the class proxy. + + Type of the target. + The interceptors. + The constructor args. + + + + + + + + + + + + + + + + + + Creates the class proxy. + + Type of the target. + The interfaces. + The options. + The constructor args. + The interceptors. + + + + + + Gets the proxy builder instance. + + The proxy builder. + + + + + + + + + + + + + + For interface proxies, this will point to the + on the target class + + + + + Base for Attributes that want to express lifestyle + chosen by the component. + + + + + Initializes a new instance of the class. + + The type. + + + + Gets or sets the lifestyle. + + The lifestyle. + + + + This attribute is usefull only when you want to register all components + on an assembly as a batch process. + By doing so, the batch register will look + for this attribute to distinguish components from other classes. + + + + + Initializes a new instance of the class. + + The key. + + + + Initializes a new instance of the class. + + The key. + The service. + + + + Initializes a new instance of the class. + + The key. + The service. + The lifestyle. + + + + Gets the service. + + The service. + + + + Gets the key. + + The key. + + + + Associates a custom component with a component + + + + + Initializes a new instance of the class. + + Type of the component activator. + + + + Gets the type of the component activator. + + The type of the component activator. + + + + Specifies the proxying behavior for a component. + + + + + Initializes a new instance of the class. + + + + + Gets or sets a value indicating whether the generated + interface proxy should inherit from . + + + + + Determines if the component requires a single interface proxy. + + + true if the component requires a single interface proxy. + + + + Gets or sets the additional interfaces used during proxy generation. + + + + + Marks as property to be skipped and not be wired + by the IoC container + + + + + Used to declare that a component wants interceptors acting on it. + + + + + Constructs the InterceptorAttribute pointing to + a key to a interceptor + + + + + + + Constructs the InterceptorAttribute pointing to + a service + + + + + + + Indicates that the target components wants a + singleton lifestyle. + + + + + Initializes a new instance of the class. + + + + + Indicates that the target components wants a + transient lifestyle. + + + + + Initializes a new instance of the class. + + + + + Indicates that the target components wants a + per thread lifestyle. + + + + + Initializes a new instance of the class. + + + + + Indicates that the target components wants a + per web request lifestyle. + + + + + Indicates that the target components wants a + pooled lifestyle. + + + + + Initializes a new instance of the class + using the default initial pool size (5) and the max pool size (15). + + + + + Initializes a new instance of the class. + + Initial size of the pool. + Max pool size. + + + + Gets the initial size of the pool. + + The initial size of the pool. + + + + Gets the maximum pool size. + + The size of the max pool. + + + + Indicates that the target components wants a + custom lifestyle. + + + + + Initializes a new instance of the class. + + The lifestyle handler. + + + + Gets the type of the lifestyle handler. + + The type of the lifestyle handler. + + + + New interface that is going to be used by DynamicProxy 2 + + + + + New interface that is going to be used by DynamicProxy 2 + + + + + Returns the concrete instantiation of , with any generic parameters bound to real types. + + The concrete instantiation of , or if not a generic method. + Can be slower than calling . + + + + Returns the concrete instantiation of , with any generic parameters bound to real types. + + The concrete instantiation of , or if not a generic method. + Can be slower than calling . + + + + + + + + + + The generic arguments of the method, or null if not a generic method. + + + + + + + + + For interface proxies, this will point to the + on the target class + + + + + Interceptors might implement this to receive the + ComponentModel on behalf of the component where the + interceptor is acting. + + + + + Get the proxy target (note that null is a valid target!) + + + + + + + Gets the interceptors for the proxy + + + + + + + Abstract representation of a vertex. + + + + + The nodes that dependes on this node + + + + + The nodes that this node depends + + + + + The node has not been visited yet + + + + + This node is in the process of being visited + + + + + This now was visited + + + + + Represents a collection of objects + which are guaranted to be unique + and holds a color for them + + + + + Holds a timestamp (integer) + for a given item + + + + + Returns the node at the specified index. + + The lookup index. + The node at the specified index. + + If the specified is greater than the + number of objects within the list. + + + + + Validates the specified index. + + The lookup index. + + If the index is invalid. + + + + + Lifecycle interface. If implemented by a component, + the method Initialized will be invoked by the container + before making the component available to the external world. + + + + + Implementors should perform any initialization logic. + + + + + Only called for components that + belongs to a pool when the component + comes back to the pool. + + + + + Implementors should perform any + initialization/clean up. + + + + + Interface for components that wish to be started by the container + + + + + Starts this instance. + + + + + Stops this instance. + + + + + Manages the instantiation of s. + + + + + Creates a new logger, getting the logger name from the specified type. + + + + + Creates a new logger. + + + + + Creates a new logger, getting the logger name from the specified type. + + + + + Creates a new logger. + + + + + Provides a factory that can produce either or + classes. + + + + + Creates a new extended logger, getting the logger name from the specified type. + + + + + Creates a new extended logger. + + + + + Creates a new extended logger, getting the logger name from the specified type. + + + + + Creates a new extended logger. + + + + + Creates a new extended logger, getting the logger name from the specified type. + + + + + Creates a new extended logger. + + + + + Creates a new extended logger, getting the logger name from the specified type. + + + + + Creates a new extended logger. + + + + + Gets the configuration file. + + i.e. log4net.config + + + + + + Gets the configuration file. + + i.e. log4net.config + + + + + + Summary description for ConsoleFactory. + + + + + NullLogFactory used when logging is turned off. + + + + + Creates an instance of ILogger with the specified name. + + Name. + + + + + + Creates an instance of ILogger with the specified name and LoggerLevel. + + Name. + Level. + + + + + + Creates outputing + to files. The name of the file is derived from the log name + plus the 'log' extension. + + + + + Manages logging. + + + This is a facade for the different logging subsystems. + It offers a simplified interface that follows IOC patterns + and a simplified priority/level/severity abstraction. + + + + + Logs a debug message. + + The message to log + + + + Logs a debug message. + + The exception to log + The message to log + + + + Logs a debug message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs a debug message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs a debug message. + + The exception to log + Format string for the message to log + Format arguments for the message to log + + + + Logs a debug message. + + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a debug message. + + The exception to log + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs an info message. + + The message to log + + + + Logs an info message. + + The exception to log + The message to log + + + + Logs an info message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs an info message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs an info message. + + The exception to log + Format string for the message to log + Format arguments for the message to log + + + + Logs an info message. + + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs an info message. + + The exception to log + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a warn message. + + The message to log + + + + Logs a warn message. + + The exception to log + The message to log + + + + Logs a warn message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs a warn message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs a warn message. + + The exception to log + Format string for the message to log + Format arguments for the message to log + + + + Logs a warn message. + + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a warn message. + + The exception to log + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs an error message. + + The message to log + + + + Logs an error message. + + The exception to log + The message to log + + + + Logs an error message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs an error message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs an error message. + + The exception to log + Format string for the message to log + Format arguments for the message to log + + + + Logs an error message. + + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs an error message. + + The exception to log + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a fatal message. + + The message to log + + + + Logs a fatal message. + + The exception to log + The message to log + + + + Logs a fatal message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs a fatal message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs a fatal message. + + The exception to log + Format string for the message to log + Format arguments for the message to log + + + + Logs a fatal message. + + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a fatal message. + + The exception to log + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a fatal error message. + + The Message + + + + Logs a fatal error message. + + The Message + The Exception + + + + Logs a fatal error message. + + Message format + Array of objects to write using format + + + + Create a new child logger. + The name of the child logger is [current-loggers-name].[passed-in-name] + + The Subname of this logger. + The New ILogger instance. + If the name has an empty element name. + + + + Determines if messages of priority "debug" will be logged. + + True if "debug" messages will be logged. + + + + Determines if messages of priority "info" will be logged. + + True if "info" messages will be logged. + + + + Determines if messages of priority "warn" will be logged. + + True if "warn" messages will be logged. + + + + Determines if messages of priority "error" will be logged. + + True if "error" messages will be logged. + + + + Determines if messages of priority "fatal" will be logged. + + True if "fatal" messages will be logged. + + + + Determines if messages of priority "fatalError" will be logged. + + True if "fatalError" messages will be logged. + + + + The Level Filtered Logger class. This is a base clase which + provides a LogLevel attribute and reroutes all functions into + one Log method. + + + + + Creates a new LevelFilteredLogger. + + + + + Keep the instance alive in a remoting scenario + + + + + + + Logs a debug message. + + The message to log + + + + Logs a debug message. + + The exception to log + The message to log + + + + Logs a debug message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs a debug message. + + The exception to log + Format string for the message to log + Format arguments for the message to log + + + + Logs a debug message. + + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a debug message. + + The exception to log + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a debug message. + + Message format + Array of objects to write using format + + + + Logs an info message. + + The message to log + + + + Logs an info message. + + The exception to log + The message to log + + + + Logs an info message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs an info message. + + The exception to log + Format string for the message to log + Format arguments for the message to log + + + + Logs an info message. + + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs an info message. + + The exception to log + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs an info message. + + Message format + Array of objects to write using format + + + + Logs a warn message. + + The message to log + + + + Logs a warn message. + + The exception to log + The message to log + + + + Logs a warn message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs a warn message. + + The exception to log + Format string for the message to log + Format arguments for the message to log + + + + Logs a warn message. + + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a warn message. + + The exception to log + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a warn message. + + Message format + Array of objects to write using format + + + + Logs an error message. + + The message to log + + + + Logs an error message. + + The exception to log + The message to log + + + + Logs an error message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs an error message. + + The exception to log + Format string for the message to log + Format arguments for the message to log + + + + Logs an error message. + + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs an error message. + + The exception to log + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs an error message. + + Message format + Array of objects to write using format + + + + Logs a fatal message. + + The message to log + + + + Logs a fatal message. + + The exception to log + The message to log + + + + Logs a fatal message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs a fatal message. + + The exception to log + Format string for the message to log + Format arguments for the message to log + + + + Logs a fatal message. + + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a fatal message. + + The exception to log + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a fatal message. + + Message format + Array of objects to write using format + + + + Logs a fatal error message. + + The Message + + + + Logs a fatal error message. + + The Message + The Exception + + + + Logs a fatal error message. + + Message format + Array of objects to write using format + + + + Implementors output the log content by implementing this method only. + Note that exception can be null + + + + + + + + + + + + + The LoggerLevel that this logger + will be using. Defaults to LoggerLevel.Off + + + + The name that this logger will be using. + Defaults to String.Empty + + + + Determines if messages of priority "debug" will be logged. + + + true if log level flags include the bit + + + + Determines if messages of priority "info" will be logged. + + + true if log level flags include the bit + + + + Determines if messages of priority "warn" will be logged. + + + true if log level flags include the bit + + + + Determines if messages of priority "error" will be logged. + + + true if log level flags include the bit + + + + Determines if messages of priority "fatal" will be logged. + + + true if log level flags include the bit + + + + Determines if messages of priority "fatal" will be logged. + + + true if log level flags include the bit + + + + The Logger sending everything to the standard output streams. + This is mainly for the cases when you have a utility that + does not have a logger to supply. + + + + + Creates a new ConsoleLogger with the Level + set to LoggerLevel.Debug and the Name + set to String.Empty. + + + + + Creates a new ConsoleLogger with the Name + set to String.Empty. + + The logs Level. + + + + Creates a new ConsoleLogger with the Level + set to LoggerLevel.Debug. + + The logs Name. + + + + Creates a new ConsoleLogger. + + The logs Name. + The logs Level. + + + + A Common method to log. + + The level of logging + The name of the logger + The Message + The Exception + + + + Returns a new ConsoleLogger with the name + added after this loggers name, with a dot in between. + + The added hierarchical name. + A new ConsoleLogger. + + + + The Logger using standart Diagnostics namespace. + + + + + Creates a logger based on . + + + + + + + + Creates a logger based on . + + + + + + + + + + + Creates a logger based on . + + + + + + + + + + + + + + Provides an interface that supports and + allows the storage and retrieval of Contexts. These are supported in + both log4net and NLog. + + + + + Exposes the Global Context of the extended logger. + + + + + Exposes the Thread Context of the extended logger. + + + + + Exposes the Thread Stack of the extended logger. + + + + + The Null Logger class. This is useful for implementations where you need + to provide a logger to a utility class, but do not want any output from it. + It also helps when you have a utility that does not have a logger to supply. + + + + + Creates a new NullLogger. + + + + + No-op. + + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + + + + Returns this NullLogger. + + Ignored + This ILogger instance. + + + + No-op. + + false + + + + No-op. + + false + + + + No-op. + + false + + + + No-op. + + false + + + + No-op. + + false + + + + No-op. + + false + + + + Returns empty context properties. + + + + + Returns empty context properties. + + + + + Returns empty context stacks. + + + + + Interface for Context Properties implementations + + + + This interface defines a basic property get set accessor. + + + Based on the ContextPropertiesBase of log4net, by Nicko Cadell. + + + + + + Gets or sets the value of a property + + + The value for the property with the specified key + + + + Gets or sets the value of a property + + + + + + The Stream Logger class. This class can stream log information + to any stream, it is suitable for storing a log file to disk, + or to a MemoryStream for testing your components. + + + This logger is not thread safe. + + + + + Creates a new StreamLogger with default encoding + and buffer size. Initial Level is set to Debug. + + + The name of the log. + + + The stream that will be used for logging, + seeking while the logger is alive + + + + + Creates a new StreamLogger with default buffer size. + Initial Level is set to Debug. + + + The name of the log. + + + The stream that will be used for logging, + seeking while the logger is alive + + + The encoding that will be used for this stream. + + + + + Creates a new StreamLogger. + Initial Level is set to Debug. + + + The name of the log. + + + The stream that will be used for logging, + seeking while the logger is alive + + + The encoding that will be used for this stream. + + + The buffer size that will be used for this stream. + + + + + Creates a new StreamLogger with + Debug as default Level. + + The name of the log. + The StreamWriter the log will write to. + + + + The WebLogger sends everything to the HttpContext.Trace + + + Trace must be enabled on the Asp.Net configuration file (web.config or machine.config) + + + + + Creates a new WebLogger with the priority set to DEBUG. + + + + + Creates a new WebLogger. + + The Log level typecode. + + + + Creates a new WebLogger. + + The Log name. + + + + Creates a new WebLogger. + + The Log name. + The Log level typecode. + + + + A Common method to log. + + The level of logging + The Log name. + The Message + The Exception + + + + Just returns this logger (WebLogger is not hierarchical). + + Ignored + This ILogger instance. + + + + Supporting Logger levels. + + + + + Logging will be off + + + + + Fatal logging level + + + + + Error logging level + + + + + Warn logging level + + + + + Info logging level + + + + + Debug logging level + + + + + Summary description for IConfiguration. + + + is a interface encapsulating a configuration node + used to retrieve configuration values. + + + + + Gets the value of the node and converts it + into specified . + + The + + The Default value returned if the convertion fails. + + The Value converted into the specified type. + + + + Gets the name of the node. + + + The Name of the node. + + + + + Gets the value of the node. + + + The Value of the node. + + + + + Gets an of + elements containing all node children. + + The Collection of child nodes. + + + + Gets an of the configuration attributes. + + + + + This is an abstract implementation + that deals with methods that can be abstracted away + from underlying implementations. + + + + AbstractConfiguration makes easier to implementers + to create a new version of + + + + + Gets the value of the node and converts it + into specified . + + The + + The Default value returned if the convertion fails. + + The Value converted into the specified type. + + + + Gets the name of the . + + + The Name of the . + + + + + Gets the value of . + + + The Value of the . + + + + + Gets all child nodes. + + The of child nodes. + + + + Gets node attributes. + + + All attributes of the node. + + + + + A collection of objects. + + + + + Creates a new instance of ConfigurationCollection. + + + + + Creates a new instance of ConfigurationCollection. + + + + + Creates a new instance of ConfigurationCollection. + + + + + Adds an . + + The to add. + + The index at which the new element was inserted. + + + + + Adds an array of . + + The Array of to add. + + + + Adds a . + + The to add. + + + + Copies the elements to a one-dimensional instance at the specified index. + + + The one-dimensional must have zero-based indexing. + + The zero-based index in array at which copying begins. + + + + Gets a value indicating whether the contains + in the collection. + + The to locate. + + if the is contained in the collection; + otherwise, . + + + + + Removes a specific from the + collection. + + The to remove from the collection. + + is not found in the collection. + + + + + Represents the entry at the specified index of the . + + + The zero-based index of the entry to locate in the collection. + + + The entry at the specified index of the collection. + + + is outside the valid range of indexes for the collection. + + + + + Summary description for MutableConfiguration. + + + + + Initializes a new instance of the class. + + The name. + + + + Enumeration used to mark the component's lifestyle. + + + + + No lifestyle specified. + + + + + Singleton components are instantiated once, and shared + between all clients. + + + + + Thread components have a unique instance per thread. + + + + + Transient components are created on demand. + + + + + Optimization of transient components that keeps + instance in a pool instead of always creating them. + + + + + Any other logic to create/release components. + + + + + PerWebRequest components are created once per Http Request + + + + + + + + + Represents the collection of information and + meta information collected about a component. + + + + Name (key) of the component + + + Service exposed + + + Implementation for the service + + + Extended properties + + + Lifestyle for the component + + + Custom lifestyle, if any + + + Custom activator, if any + + + Dependencies the kernel must resolve + + + All available constructors + + + All potential properties that can be setted by the kernel + + + Steps of lifecycle + + + External parameters + + + Configuration node associated + + + Interceptors associated + + + + Constructs a ComponentModel + + + + + Sets or returns the component key + + + + + Gets or sets the service exposed. + + The service. + + + + Gets or sets the component implementation. + + The implementation. + + + + Gets or sets a value indicating whether the component requires generic arguments. + + + true if generic arguments are required; otherwise, false. + + + + + Gets or sets the extended properties. + + The extended properties. + + + + Gets the constructors candidates. + + The constructors. + + + + Gets the properties set. + + The properties. + + + + Gets or sets the configuration. + + The configuration. + + + + Gets the lifecycle steps. + + The lifecycle steps. + + + + Gets or sets the lifestyle type. + + The type of the lifestyle. + + + + Gets or sets the strategy for + inspecting public properties + on the components + + + + + Gets or sets the custom lifestyle. + + The custom lifestyle. + + + + Gets or sets the custom component activator. + + The custom component activator. + + + + Gets the interceptors. + + The interceptors. + + + + Gets the parameter collection. + + The parameters. + + + + Dependencies are kept within constructors and + properties. Others dependencies must be + registered here, so the kernel (as a matter + of fact the handler) can check them + + + + + Represents a constructor of the component + that the container can use to initialize it properly. + + + + + Initializes a new instance of the class. + + The constructor info. + The dependencies. + + + + Gets the ConstructorInfo (from reflection). + + The constructor. + + + + Gets the dependencies this constructor candidate exposes. + + The dependencies. + + + + Collection of + + + + Adds the specified candidate. + + The candidate. + + + + Clears this instance. + + + + + Gets the fewer arguments candidate. + + The fewer arguments candidate. + + + + Represents a dependency (other component or a + fixed value available through external configuration). + + + + + Initializes a new instance of the class. + + The type. + The dependency key. + Type of the target. + if set to true [is optional]. + + + + Returns a that represents the current . + + + A that represents the current . + + + + + Serves as a hash function for a particular type, suitable + for use in hashing algorithms and data structures like a hash table. + + + A hash code for the current . + + + + + Determines whether the specified is equal to the current . + + The to compare with the current . + + if the specified is equal to the + current ; otherwise, . + + + + + Gets or sets the type of the dependency. + + The type of the dependency. + + + + Gets or sets the dependency key. + + The dependency key. + + + + Gets the type of the target. + + The type of the target. + + + + Gets or sets whether this dependency is optional. + + + true if this dependency is optional; otherwise, false. + + + + + Collection of . + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The dependencies. + + + + Initializes a new instance of the class. + + The dependencies. + + + + Adds the specified model. + + The model. + + + + Removes the specified model. + + The model. + + + + Clears this instance. + + + + + Determines whether this collection contains the the specified model. + + The model. + + true if the collection contains the specified model; otherwise, false. + + + + + Represents an reference to a Interceptor component. + + + + + Initializes a new instance of the class. + + The component key. + + + + Initializes a new instance of the class. + + Type of the service. + + + + Gets the type of the service. + + The type of the service. + + + + Gets the interceptor component key. + + The component key. + + + + Gets the type of the reference. + + The type of the reference. + + + + Collection of + + + + Adds the specified interceptor. + + The interceptor. + + + + Adds the the specified interceptor as the first. + + The interceptor. + + + + Adds the the specified interceptor as the last. + + The interceptor. + + + + Inserts the specified interceptor at the specified index. + + The index. + The interceptor. + + + + When implemented by a class, copies the elements of + the to an , starting at a particular index. + + The one-dimensional that is the destination of the elements copied from . The must have zero-based indexing. + The zero-based index in at which copying begins. + + is . + + is less than zero. + + + is multidimensional. + -or- + + is equal to or greater than the length of . + -or- + The number of elements in the source is greater than the available space from to the end of the destination . + + The type of the source cannot be cast automatically to the type of the destination . + + + + Returns an enumerator that can iterate through a collection. + + + An + that can be used to iterate through the collection. + + + + + Gets a value indicating whether this instance has interceptors. + + + true if this instance has interceptors; otherwise, false. + + + + + Gets the number of + elements contained in the . + + + + + + + Gets an object that + can be used to synchronize access to the . + + + + + + + Gets a value + indicating whether access to the is synchronized + (thread-safe). + + + + + + + Represents a collection of ordered lifecycle steps. + + + + + Initializes a new instance of the class. + + + + + Returns all steps for the commission phase + + + + + + + Returns all steps for the decommission phase + + + + + + + Adds a step to the commission or decomission phases. + + + + + + + + + Copies the elements of + the to an , starting at a particular index. + + The one-dimensional that is the destination of the elements copied from . The must have zero-based indexing. + The zero-based index in at which copying begins. + + is . + + is less than zero. + + + is multidimensional. + -or- + + is equal to or greater than the length of . + -or- + The number of elements in the source is greater than the available space from to the end of the destination . + + The type of the source cannot be cast automatically to the type of the destination . + + + + Returns an enumerator that can iterate through a collection. + + + An + that can be used to iterate through the collection. + + + + + Gets a value indicating whether this instance has commission steps. + + + true if this instance has commission steps; otherwise, false. + + + + + Gets a value indicating whether this instance has decommission steps. + + + true if this instance has decommission steps; otherwise, false. + + + + + Gets the number of + elements contained in the . + + + + + + + Gets an object that + can be used to synchronize access to the . + + + + + + + Gets a value + indicating whether access to the is synchronized + (thread-safe). + + + + + + + Represents meta information associated with a method + (not yet defined) + + + + + Initializes a new instance of the class. + + The config node. + + + + Gets the config node. + + The config node. + + + + Collection of + + + + Adds the specified model. + + The model. + + + + Gets the method info2 model. + + The method info2 model. + + + + Represents a parameter. Usually the parameter + comes from the external world, ie, an external configuration. + + + + + Initializes a new instance of the class. + + The name. + The value. + + + + Initializes a new instance of the class. + + The name. + The value. + + + + Gets the name. + + The name. + + + + Gets the value. + + The value. + + + + Gets the config value. + + The config value. + + + + Collection of + + + + Initializes a new instance of the class. + + + + + Adds the specified name. + + The name. + The value. + + + + Adds the specified name. + + The name. + The config node. + + + + Determines whether this collection contains the specified key. + + The key. + + true if yes; otherwise, false. + + + + + Adds the specified key. + + + Not implemented + + The key. + The value. + + + + Clears this instance. + + + Not implemented + + + + + Removes the specified key. + + The key. + + Not implemented + + + + + Copy the content to the specified array + + target array + target index + + Not implemented + + + + + Returns an enumerator that can iterate through a collection. + + + An + that can be used to iterate through the collection. + + + + + Gets the keys. + + The keys. + + Not implemented + + + + + Gets the values. + + The values. + + Not implemented + + + + + Gets a value indicating whether this instance is read only. + + + true if this instance is read only; otherwise, false. + + + + + Gets a value indicating whether this instance is fixed size. + + + true if this instance is fixed size; otherwise, false. + + + + + Gets the with the specified key. + + + + + + + Gets the count. + + The count. + + + + Gets the sync root. + + The sync root. + + + + Gets a value indicating whether this instance is synchronized. + + + true if this instance is synchronized; otherwise, false. + + + + + Represents a property and the respective dependency. + + + + + Initializes a new instance of the class. + + The property info. + The dependency. + + + + Gets the property. + + The property. + + + + Gets the dependency. + + The dependency. + + + + Collection of + + + + Adds the specified property. + + The property. + + + + Clears this instance. + + + + + Finds a PropertySet the by PropertyInfo. + + The info. + + + + + + Represents a 'streamable' resource. Can + be a file, a resource in an assembly. + + + + + Returns a reader for the stream + + + It's up to the caller to dispose the reader. + + + + + + + Returns a reader for the stream + + + It's up to the caller to dispose the reader. + + + + + + + + + Returns an instance of + created according to the relativePath + using itself as the root. + + + + + + + + + + + Only valid for resources that + can be obtained through relative paths + + + + + + + + + Do not allow closing and disposal of the + underlying . + + + + + Depicts the contract for resource factories. + + + + + Used to check whether the resource factory + is able to deal with the given resource + identifier. + + + Implementors should return true + only if the given identificator is supported + by the resource factory + + + + + + + + + Creates an instance + for the given resource identifier + + + + + + + + + Creates an instance + for the given resource identifier + + + + + + + + + + + + + + + + + + + + + + + Adapts a static string content as an + + + + Enable access to files on network shares + + + + + Defines that the implementation wants a + in order to + access other components. The creator must be aware + that the component might (or might not) implement + the interface. + + + Used by Castle Project components to, for example, + gather logging factories + + + + + Increments IServiceProvider with a generic service resolution operation. + + + + + This interface should be implemented by classes + that are available in a bigger context, exposing + the container to different areas in the same application. + + For example, in Web application, the (global) HttpApplication + subclasses should implement this interface to expose + the configured container + + + + + General purpose class to represent a standard pair of values. + + Type of the first value + Type of the second value + + + + Constructs a pair with its values + + + + + + + + \ No newline at end of file diff --git a/tools/NHibernate/TestEnbeddedConfig.cfg.xml b/tools/NHibernate/TestEnbeddedConfig.cfg.xml new file mode 100644 index 000000000..2d1cd7ea8 --- /dev/null +++ b/tools/NHibernate/TestEnbeddedConfig.cfg.xml @@ -0,0 +1,11 @@ + + + + NHibernate.Test.DebugConnectionProvider, NHibernate.Test + NHibernate.Cache.HashtableCacheProvider, NHibernate + NHibernate.Driver.SqlClientDriver + Server=localhost;initial catalog=nhibernate;User Id=;Password= + true 1, false 0, yes 1, no 0 + NHibernate.Dialect.MsSql2000Dialect + + \ No newline at end of file diff --git a/tools/NHibernate/log4net.dll b/tools/NHibernate/log4net.dll new file mode 100644 index 000000000..ffc57e112 Binary files /dev/null and b/tools/NHibernate/log4net.dll differ diff --git a/tools/NHibernate/log4net.license.txt b/tools/NHibernate/log4net.license.txt new file mode 100644 index 000000000..29f81d812 --- /dev/null +++ b/tools/NHibernate/log4net.license.txt @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/tools/NHibernate/log4net.xml b/tools/NHibernate/log4net.xml new file mode 100644 index 000000000..fab7af26d --- /dev/null +++ b/tools/NHibernate/log4net.xml @@ -0,0 +1,28655 @@ + + + + log4net + + + + + Appender that logs to a database. + + + + appends logging events to a table within a + database. The appender can be configured to specify the connection + string by setting the property. + The connection type (provider) can be specified by setting the + property. For more information on database connection strings for + your specific database see http://www.connectionstrings.com/. + + + Records are written into the database either using a prepared + statement or a stored procedure. The property + is set to (System.Data.CommandType.Text) to specify a prepared statement + or to (System.Data.CommandType.StoredProcedure) to specify a stored + procedure. + + + The prepared statement text or the name of the stored procedure + must be set in the property. + + + The prepared statement or stored procedure can take a number + of parameters. Parameters are added using the + method. This adds a single to the + ordered list of parameters. The + type may be subclassed if required to provide database specific + functionality. The specifies + the parameter name, database type, size, and how the value should + be generated using a . + + + + An example of a SQL Server table that could be logged to: + + CREATE TABLE [dbo].[Log] ( + [ID] [int] IDENTITY (1, 1) NOT NULL , + [Date] [datetime] NOT NULL , + [Thread] [varchar] (255) NOT NULL , + [Level] [varchar] (20) NOT NULL , + [Logger] [varchar] (255) NOT NULL , + [Message] [varchar] (4000) NOT NULL + ) ON [PRIMARY] + + + + An example configuration to log to the above table: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Julian Biddle + Nicko Cadell + Gert Driesen + Lance Nehring + + + + Abstract base class implementation of that + buffers events in a fixed size buffer. + + + + This base class should be used by appenders that need to buffer a + number of events before logging them. For example the + buffers events and then submits the entire contents of the buffer to + the underlying database in one go. + + + Subclasses should override the + method to deliver the buffered events. + + The BufferingAppenderSkeleton maintains a fixed size cyclic + buffer of events. The size of the buffer is set using + the property. + + A is used to inspect + each event as it arrives in the appender. If the + triggers, then the current buffer is sent immediately + (see ). Otherwise the event + is stored in the buffer. For example, an evaluator can be used to + deliver the events immediately when an ERROR event arrives. + + + The buffering appender can be configured in a mode. + By default the appender is NOT lossy. When the buffer is full all + the buffered events are sent with . + If the property is set to true then the + buffer will not be sent when it is full, and new events arriving + in the appender will overwrite the oldest event in the buffer. + In lossy mode the buffer will only be sent when the + triggers. This can be useful behavior when you need to know about + ERROR events but not about events with a lower level, configure an + evaluator that will trigger when an ERROR event arrives, the whole + buffer will be sent which gives a history of events leading up to + the ERROR event. + + + Nicko Cadell + Gert Driesen + + + + Abstract base class implementation of . + + + + This class provides the code for common functionality, such + as support for threshold filtering and support for general filters. + + + Appenders can also implement the interface. Therefore + they would require that the method + be called after the appenders properties have been configured. + + + Nicko Cadell + Gert Driesen + + + + Implement this interface for your own strategies for printing log statements. + + + + Implementors should consider extending the + class which provides a default implementation of this interface. + + + Appenders can also implement the interface. Therefore + they would require that the method + be called after the appenders properties have been configured. + + + Nicko Cadell + Gert Driesen + + + + Closes the appender and releases resources. + + + + Releases any resources allocated within the appender such as file handles, + network connections, etc. + + + It is a programming error to append to a closed appender. + + + + + + Log the logging event in Appender specific way. + + The event to log + + + This method is called to log a message into this appender. + + + + + + Gets or sets the name of this appender. + + The name of the appender. + + The name uniquely identifies the appender. + + + + + Interface for appenders that support bulk logging. + + + + This interface extends the interface to + support bulk logging of objects. Appenders + should only implement this interface if they can bulk log efficiently. + + + Nicko Cadell + + + + Log the array of logging events in Appender specific way. + + The events to log + + + This method is called to log an array of events into this appender. + + + + + + Interface used to delay activate a configured object. + + + + This allows an object to defer activation of its options until all + options have been set. This is required for components which have + related options that remain ambiguous until all are set. + + + If a component implements this interface then the method + must be called by the container after its all the configured properties have been set + and before the component can be used. + + + Nicko Cadell + + + + Activate the options that were previously set with calls to properties. + + + + This allows an object to defer activation of its options until all + options have been set. This is required for components which have + related options that remain ambiguous until all are set. + + + If a component implements this interface then this method must be called + after its properties have been set before the component can be used. + + + + + + Initial buffer size + + + + + Maximum buffer size before it is recycled + + + + + Default constructor + + + Empty default constructor + + + + + Finalizes this appender by calling the implementation's + method. + + + + If this appender has not been closed then the Finalize method + will call . + + + + + + Initialize the appender based on the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Closes the appender and release resources. + + + + Release any resources allocated within the appender such as file handles, + network connections, etc. + + + It is a programming error to append to a closed appender. + + + This method cannot be overridden by subclasses. This method + delegates the closing of the appender to the + method which must be overridden in the subclass. + + + + + + Performs threshold checks and invokes filters before + delegating actual logging to the subclasses specific + method. + + The event to log. + + + This method cannot be overridden by derived classes. A + derived class should override the method + which is called by this method. + + + The implementation of this method is as follows: + + + + + + Checks that the severity of the + is greater than or equal to the of this + appender. + + + + Checks that the chain accepts the + . + + + + + Calls and checks that + it returns true. + + + + + If all of the above steps succeed then the + will be passed to the abstract method. + + + + + + Performs threshold checks and invokes filters before + delegating actual logging to the subclasses specific + method. + + The array of events to log. + + + This method cannot be overridden by derived classes. A + derived class should override the method + which is called by this method. + + + The implementation of this method is as follows: + + + + + + Checks that the severity of the + is greater than or equal to the of this + appender. + + + + Checks that the chain accepts the + . + + + + + Calls and checks that + it returns true. + + + + + If all of the above steps succeed then the + will be passed to the method. + + + + + + Test if the logging event should we output by this appender + + the event to test + true if the event should be output, false if the event should be ignored + + + This method checks the logging event against the threshold level set + on this appender and also against the filters specified on this + appender. + + + The implementation of this method is as follows: + + + + + + Checks that the severity of the + is greater than or equal to the of this + appender. + + + + Checks that the chain accepts the + . + + + + + + + + + Adds a filter to the end of the filter chain. + + the filter to add to this appender + + + The Filters are organized in a linked list. + + + Setting this property causes the new filter to be pushed onto the + back of the filter chain. + + + + + + Clears the filter list for this appender. + + + + Clears the filter list for this appender. + + + + + + Checks if the message level is below this appender's threshold. + + to test against. + + + If there is no threshold set, then the return value is always true. + + + + true if the meets the + requirements of this appender. + + + + + Is called when the appender is closed. Derived classes should override + this method if resources need to be released. + + + + Releases any resources allocated within the appender such as file handles, + network connections, etc. + + + It is a programming error to append to a closed appender. + + + + + + Subclasses of should implement this method + to perform actual logging. + + The event to append. + + + A subclass must implement this method to perform + logging of the . + + This method will be called by + if all the conditions listed for that method are met. + + + To restrict the logging of events in the appender + override the method. + + + + + + Append a bulk array of logging events. + + the array of logging events + + + This base class implementation calls the + method for each element in the bulk array. + + + A sub class that can better process a bulk array of events should + override this method in addition to . + + + + + + Called before as a precondition. + + + + This method is called by + before the call to the abstract method. + + + This method can be overridden in a subclass to extend the checks + made before the event is passed to the method. + + + A subclass should ensure that they delegate this call to + this base class if it is overridden. + + + true if the call to should proceed. + + + + Renders the to a string. + + The event to render. + The event rendered as a string. + + + Helper method to render a to + a string. This appender must have a + set to render the to + a string. + + If there is exception data in the logging event and + the layout does not process the exception, this method + will append the exception text to the rendered string. + + + Where possible use the alternative version of this method + . + That method streams the rendering onto an existing Writer + which can give better performance if the caller already has + a open and ready for writing. + + + + + + Renders the to a string. + + The event to render. + The TextWriter to write the formatted event to + + + Helper method to render a to + a string. This appender must have a + set to render the to + a string. + + If there is exception data in the logging event and + the layout does not process the exception, this method + will append the exception text to the rendered string. + + + Use this method in preference to + where possible. If, however, the caller needs to render the event + to a string then does + provide an efficient mechanism for doing so. + + + + + + The layout of this appender. + + + See for more information. + + + + + The name of this appender. + + + See for more information. + + + + + The level threshold of this appender. + + + + There is no level threshold filtering by default. + + + See for more information. + + + + + + It is assumed and enforced that errorHandler is never null. + + + + It is assumed and enforced that errorHandler is never null. + + + See for more information. + + + + + + The first filter in the filter chain. + + + + Set to null initially. + + + See for more information. + + + + + + The last filter in the filter chain. + + + See for more information. + + + + + Flag indicating if this appender is closed. + + + See for more information. + + + + + The guard prevents an appender from repeatedly calling its own DoAppend method + + + + + StringWriter used to render events + + + + + Gets or sets the threshold of this appender. + + + The threshold of the appender. + + + + All log events with lower level than the threshold level are ignored + by the appender. + + + In configuration files this option is specified by setting the + value of the option to a level + string, such as "DEBUG", "INFO" and so on. + + + + + + Gets or sets the for this appender. + + The of the appender + + + The provides a default + implementation for the property. + + + + + + The filter chain. + + The head of the filter chain filter chain. + + + Returns the head Filter. The Filters are organized in a linked list + and so all Filters on this Appender are available through the result. + + + + + + Gets or sets the for this appender. + + The layout of the appender. + + + See for more information. + + + + + + + Gets or sets the name of this appender. + + The name of the appender. + + + The name uniquely identifies the appender. + + + + + + Tests if this appender requires a to be set. + + + + In the rather exceptional case, where the appender + implementation admits a layout but can also work without it, + then the appender should return true. + + + This default implementation always returns true. + + + + true if the appender requires a layout object, otherwise false. + + + + + The default buffer size. + + + The default size of the cyclic buffer used to store events. + This is set to 512 by default. + + + + + Initializes a new instance of the class. + + + + Protected default constructor to allow subclassing. + + + + + + Initializes a new instance of the class. + + the events passed through this appender must be + fixed by the time that they arrive in the derived class' SendBuffer method. + + + Protected constructor to allow subclassing. + + + The should be set if the subclass + expects the events delivered to be fixed even if the + is set to zero, i.e. when no buffering occurs. + + + + + + Flush the currently buffered events + + + + Flushes any events that have been buffered. + + + If the appender is buffering in mode then the contents + of the buffer will NOT be flushed to the appender. + + + + + + Flush the currently buffered events + + set to true to flush the buffer of lossy events + + + Flushes events that have been buffered. If is + false then events will only be flushed if this buffer is non-lossy mode. + + + If the appender is buffering in mode then the contents + of the buffer will only be flushed if is true. + In this case the contents of the buffer will be tested against the + and if triggering will be output. All other buffered + events will be discarded. + + + If is true then the buffer will always + be emptied by calling this method. + + + + + + Initialize the appender based on the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Close this appender instance. + + + + Close this appender instance. If this appender is marked + as not then the remaining events in + the buffer must be sent when the appender is closed. + + + + + + This method is called by the method. + + the event to log + + + Stores the in the cyclic buffer. + + + The buffer will be sent (i.e. passed to the + method) if one of the following conditions is met: + + + + The cyclic buffer is full and this appender is + marked as not lossy (see ) + + + An is set and + it is triggered for the + specified. + + + + Before the event is stored in the buffer it is fixed + (see ) to ensure that + any data referenced by the event will be valid when the buffer + is processed. + + + + + + Sends the contents of the buffer. + + The first logging event. + The buffer containing the events that need to be send. + + + The subclass must override . + + + + + + Sends the events. + + The events that need to be send. + + + The subclass must override this method to process the buffered events. + + + + + + The size of the cyclic buffer used to hold the logging events. + + + Set to by default. + + + + + The cyclic buffer used to store the logging events. + + + + + The triggering event evaluator that causes the buffer to be sent immediately. + + + The object that is used to determine if an event causes the entire + buffer to be sent immediately. This field can be null, which + indicates that event triggering is not to be done. The evaluator + can be set using the property. If this appender + has the ( property) set to + true then an must be set. + + + + + Indicates if the appender should overwrite events in the cyclic buffer + when it becomes full, or if the buffer should be flushed when the + buffer is full. + + + If this field is set to true then an must + be set. + + + + + The triggering event evaluator filters discarded events. + + + The object that is used to determine if an event that is discarded should + really be discarded or if it should be sent to the appenders. + This field can be null, which indicates that all discarded events will + be discarded. + + + + + Value indicating which fields in the event should be fixed + + + By default all fields are fixed + + + + + The events delivered to the subclass must be fixed. + + + + + Gets or sets a value that indicates whether the appender is lossy. + + + true if the appender is lossy, otherwise false. The default is false. + + + + This appender uses a buffer to store logging events before + delivering them. A triggering event causes the whole buffer + to be send to the remote sink. If the buffer overruns before + a triggering event then logging events could be lost. Set + to false to prevent logging events + from being lost. + + If is set to true then an + must be specified. + + + + + Gets or sets the size of the cyclic buffer used to hold the + logging events. + + + The size of the cyclic buffer used to hold the logging events. + + + + The option takes a positive integer + representing the maximum number of logging events to collect in + a cyclic buffer. When the is reached, + oldest events are deleted as new events are added to the + buffer. By default the size of the cyclic buffer is 512 events. + + + If the is set to a value less than + or equal to 1 then no buffering will occur. The logging event + will be delivered synchronously (depending on the + and properties). Otherwise the event will + be buffered. + + + + + + Gets or sets the that causes the + buffer to be sent immediately. + + + The that causes the buffer to be + sent immediately. + + + + The evaluator will be called for each event that is appended to this + appender. If the evaluator triggers then the current buffer will + immediately be sent (see ). + + If is set to true then an + must be specified. + + + + + Gets or sets the value of the to use. + + + The value of the to use. + + + + The evaluator will be called for each event that is discarded from this + appender. If the evaluator triggers then the current buffer will immediately + be sent (see ). + + + + + + Gets or sets a value indicating if only part of the logging event data + should be fixed. + + + true if the appender should only fix part of the logging event + data, otherwise false. The default is false. + + + + Setting this property to true will cause only part of the + event data to be fixed and serialized. This will improve performance. + + + See for more information. + + + + + + Gets or sets a the fields that will be fixed in the event + + + The event fields that will be fixed before the event is buffered + + + + The logging event needs to have certain thread specific values + captured before it can be buffered. See + for details. + + + + + + + Initializes a new instance of the class. + + + Public default constructor to initialize a new instance of this class. + + + + + Initialize the appender based on the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Override the parent method to close the database + + + + Closes the database command and database connection. + + + + + + Inserts the events into the database. + + The events to insert into the database. + + + Insert all the events specified in the + array into the database. + + + + + + Adds a parameter to the command. + + The parameter to add to the command. + + + Adds a parameter to the ordered list of command parameters. + + + + + + Writes the events to the database using the transaction specified. + + The transaction that the events will be executed under. + The array of events to insert into the database. + + + The transaction argument can be null if the appender has been + configured not to use transactions. See + property for more information. + + + + + + Formats the log message into database statement text. + + The event being logged. + + This method can be overridden by subclasses to provide + more control over the format of the database statement. + + + Text that can be passed to a . + + + + + Connects to the database. + + + + + Retrieves the class type of the ADO.NET provider. + + + + Gets the Type of the ADO.NET provider to use to connect to the + database. This method resolves the type specified in the + property. + + + Subclasses can override this method to return a different type + if necessary. + + + The of the ADO.NET provider + + + + Prepares the database command and initialize the parameters. + + + + + Flag to indicate if we are using a command object + + + + Set to true when the appender is to use a prepared + statement or stored procedure to insert into the database. + + + + + + The list of objects. + + + + The list of objects. + + + + + + The security context to use for privileged calls + + + + + The that will be used + to insert logging events into a database. + + + + + The database command. + + + + + Database connection string. + + + + + String type name of the type name. + + + + + The text of the command. + + + + + The command type. + + + + + Indicates whether to use transactions when writing to the database. + + + + + Indicates whether to use transactions when writing to the database. + + + + + Gets or sets the database connection string that is used to connect to + the database. + + + The database connection string used to connect to the database. + + + + The connections string is specific to the connection type. + See for more information. + + + Connection string for MS Access via ODBC: + "DSN=MS Access Database;UID=admin;PWD=;SystemDB=C:\data\System.mdw;SafeTransactions = 0;FIL=MS Access;DriverID = 25;DBQ=C:\data\train33.mdb" + + Another connection string for MS Access via ODBC: + "Driver={Microsoft Access Driver (*.mdb)};DBQ=C:\Work\cvs_root\log4net-1.2\access.mdb;UID=;PWD=;" + + Connection string for MS Access via OLE DB: + "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Work\cvs_root\log4net-1.2\access.mdb;User Id=;Password=;" + + + + + Gets or sets the type name of the connection + that should be created. + + + The type name of the connection. + + + + The type name of the ADO.NET provider to use. + + + The default is to use the OLE DB provider. + + + Use the OLE DB Provider. This is the default value. + System.Data.OleDb.OleDbConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Use the MS SQL Server Provider. + System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Use the ODBC Provider. + Microsoft.Data.Odbc.OdbcConnection,Microsoft.Data.Odbc,version=1.0.3300.0,publicKeyToken=b77a5c561934e089,culture=neutral + This is an optional package that you can download from + http://msdn.microsoft.com/downloads + search for ODBC .NET Data Provider. + + Use the Oracle Provider. + System.Data.OracleClient.OracleConnection, System.Data.OracleClient, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + This is an optional package that you can download from + http://msdn.microsoft.com/downloads + search for .NET Managed Provider for Oracle. + + + + + Gets or sets the command text that is used to insert logging events + into the database. + + + The command text used to insert logging events into the database. + + + + Either the text of the prepared statement or the + name of the stored procedure to execute to write into + the database. + + + The property determines if + this text is a prepared statement or a stored procedure. + + + + + + Gets or sets the command type to execute. + + + The command type to execute. + + + + This value may be either (System.Data.CommandType.Text) to specify + that the is a prepared statement to execute, + or (System.Data.CommandType.StoredProcedure) to specify that the + property is the name of a stored procedure + to execute. + + + The default value is (System.Data.CommandType.Text). + + + + + + Should transactions be used to insert logging events in the database. + + + true if transactions should be used to insert logging events in + the database, otherwise false. The default value is true. + + + + Gets or sets a value that indicates whether transactions should be used + to insert logging events in the database. + + + When set a single transaction will be used to insert the buffered events + into the database. Otherwise each event will be inserted without using + an explicit transaction. + + + + + + Gets or sets the used to call the NetSend method. + + + The used to call the NetSend method. + + + + Unless a specified here for this appender + the is queried for the + security context to use. The default behavior is to use the security context + of the current thread. + + + + + + Should this appender try to reconnect to the database on error. + + + true if the appender should try to reconnect to the database after an + error has occurred, otherwise false. The default value is false, + i.e. not to try to reconnect. + + + + The default behaviour is for the appender not to try to reconnect to the + database if an error occurs. Subsequent logging events are discarded. + + + To force the appender to attempt to reconnect to the database set this + property to true. + + + When the appender attempts to connect to the database there may be a + delay of up to the connection timeout specified in the connection string. + This delay will block the calling application's thread. + Until the connection can be reestablished this potential delay may occur multiple times. + + + + + + Gets or sets the underlying . + + + The underlying . + + + creates a to insert + logging events into a database. Classes deriving from + can use this property to get or set this . Use the + underlying returned from if + you require access beyond that which provides. + + + + + Parameter type used by the . + + + + This class provides the basic database parameter properties + as defined by the interface. + + This type can be subclassed to provide database specific + functionality. The two methods that are called externally are + and . + + + + + + Initializes a new instance of the class. + + + Default constructor for the AdoNetAppenderParameter class. + + + + + Prepare the specified database command object. + + The command to prepare. + + + Prepares the database command object by adding + this parameter to its collection of parameters. + + + + + + Renders the logging event and set the parameter value in the command. + + The command containing the parameter. + The event to be rendered. + + + Renders the logging event using this parameters layout + object. Sets the value of the parameter on the command object. + + + + + + The name of this parameter. + + + + + The database type for this parameter. + + + + + Flag to infer type rather than use the DbType + + + + + The precision for this parameter. + + + + + The scale for this parameter. + + + + + The size for this parameter. + + + + + The to use to render the + logging event into an object for this parameter. + + + + + Gets or sets the name of this parameter. + + + The name of this parameter. + + + + The name of this parameter. The parameter name + must match up to a named parameter to the SQL stored procedure + or prepared statement. + + + + + + Gets or sets the database type for this parameter. + + + The database type for this parameter. + + + + The database type for this parameter. This property should + be set to the database type from the + enumeration. See . + + + This property is optional. If not specified the ADO.NET provider + will attempt to infer the type from the value. + + + + + + + Gets or sets the precision for this parameter. + + + The precision for this parameter. + + + + The maximum number of digits used to represent the Value. + + + This property is optional. If not specified the ADO.NET provider + will attempt to infer the precision from the value. + + + + + + + Gets or sets the scale for this parameter. + + + The scale for this parameter. + + + + The number of decimal places to which Value is resolved. + + + This property is optional. If not specified the ADO.NET provider + will attempt to infer the scale from the value. + + + + + + + Gets or sets the size for this parameter. + + + The size for this parameter. + + + + The maximum size, in bytes, of the data within the column. + + + This property is optional. If not specified the ADO.NET provider + will attempt to infer the size from the value. + + + + + + + Gets or sets the to use to + render the logging event into an object for this + parameter. + + + The used to render the + logging event into an object for this parameter. + + + + The that renders the value for this + parameter. + + + The can be used to adapt + any into a + for use in the property. + + + + + + Appends logging events to the terminal using ANSI color escape sequences. + + + + AnsiColorTerminalAppender appends log events to the standard output stream + or the error output stream using a layout specified by the + user. It also allows the color of a specific level of message to be set. + + + This appender expects the terminal to understand the VT100 control set + in order to interpret the color codes. If the terminal or console does not + understand the control codes the behavior is not defined. + + + By default, all output is written to the console's standard output stream. + The property can be set to direct the output to the + error stream. + + + NOTE: This appender writes each message to the System.Console.Out or + System.Console.Error that is set at the time the event is appended. + Therefore it is possible to programmatically redirect the output of this appender + (for example NUnit does this to capture program output). While this is the desired + behavior of this appender it may have security implications in your application. + + + When configuring the ANSI colored terminal appender, a mapping should be + specified to map a logging level to a color. For example: + + + + + + + + + + + + + + + The Level is the standard log4net logging level and ForeColor and BackColor can be any + of the following values: + + Blue + Green + Red + White + Yellow + Purple + Cyan + + These color values cannot be combined together to make new colors. + + + The attributes can be any combination of the following: + + Brightforeground is brighter + Dimforeground is dimmer + Underscoremessage is underlined + Blinkforeground is blinking (does not work on all terminals) + Reverseforeground and background are reversed + Hiddenoutput is hidden + Strikethroughmessage has a line through it + + While any of these attributes may be combined together not all combinations + work well together, for example setting both Bright and Dim attributes makes + no sense. + + + Patrick Wagstrom + Nicko Cadell + + + + The to use when writing to the Console + standard output stream. + + + + The to use when writing to the Console + standard output stream. + + + + + + The to use when writing to the Console + standard error output stream. + + + + The to use when writing to the Console + standard error output stream. + + + + + + Ansi code to reset terminal + + + + + Initializes a new instance of the class. + + + The instance of the class is set up to write + to the standard output stream. + + + + + Add a mapping of level to color + + The mapping to add + + + Add a mapping to this appender. + Each mapping defines the foreground and background colours + for a level. + + + + + + This method is called by the method. + + The event to log. + + + Writes the event to the console. + + + The format of the output will depend on the appender's layout. + + + + + + Initialize the options for this appender + + + + Initialize the level to color mappings set on this appender. + + + + + + Flag to write output to the error stream rather than the standard output stream + + + + + Mapping from level object to color value + + + + + Target is the value of the console output stream. + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + The enum of possible display attributes + + + + The following flags can be combined together to + form the ANSI color attributes. + + + + + + + text is bright + + + + + text is dim + + + + + text is underlined + + + + + text is blinking + + + Not all terminals support this attribute + + + + + text and background colors are reversed + + + + + text is hidden + + + + + text is displayed with a strikethrough + + + + + The enum of possible foreground or background color values for + use with the color mapping method + + + + The output can be in one for the following ANSI colors. + + + + + + + color is black + + + + + color is red + + + + + color is green + + + + + color is yellow + + + + + color is blue + + + + + color is magenta + + + + + color is cyan + + + + + color is white + + + + + A class to act as a mapping between the level that a logging call is made at and + the color it should be displayed as. + + + + Defines the mapping between a level and the color it should be displayed in. + + + + + + An entry in the + + + + This is an abstract base class for types that are stored in the + object. + + + Nicko Cadell + + + + Default protected constructor + + + + Default protected constructor + + + + + + Initialize any options defined on this entry + + + + Should be overridden by any classes that need to initialise based on their options + + + + + + The level that is the key for this mapping + + + The that is the key for this mapping + + + + Get or set the that is the key for this + mapping subclass. + + + + + + Initialize the options for the object + + + + Combine the and together + and append the attributes. + + + + + + The mapped foreground color for the specified level + + + + Required property. + The mapped foreground color for the specified level + + + + + + The mapped background color for the specified level + + + + Required property. + The mapped background color for the specified level + + + + + + The color attributes for the specified level + + + + Required property. + The color attributes for the specified level + + + + + + The combined , and + suitable for setting the ansi terminal color. + + + + + A strongly-typed collection of objects. + + Nicko Cadell + + + + Creates a read-only wrapper for a AppenderCollection instance. + + list to create a readonly wrapper arround + + An AppenderCollection wrapper that is read-only. + + + + + An empty readonly static AppenderCollection + + + + + Initializes a new instance of the AppenderCollection class + that is empty and has the default initial capacity. + + + + + Initializes a new instance of the AppenderCollection class + that has the specified initial capacity. + + + The number of elements that the new AppenderCollection is initially capable of storing. + + + + + Initializes a new instance of the AppenderCollection class + that contains elements copied from the specified AppenderCollection. + + The AppenderCollection whose elements are copied to the new collection. + + + + Initializes a new instance of the AppenderCollection class + that contains elements copied from the specified array. + + The array whose elements are copied to the new list. + + + + Initializes a new instance of the AppenderCollection class + that contains elements copied from the specified collection. + + The collection whose elements are copied to the new list. + + + + Allow subclasses to avoid our default constructors + + + + + + + Copies the entire AppenderCollection to a one-dimensional + array. + + The one-dimensional array to copy to. + + + + Copies the entire AppenderCollection to a one-dimensional + array, starting at the specified index of the target array. + + The one-dimensional array to copy to. + The zero-based index in at which copying begins. + + + + Adds a to the end of the AppenderCollection. + + The to be added to the end of the AppenderCollection. + The index at which the value has been added. + + + + Removes all elements from the AppenderCollection. + + + + + Creates a shallow copy of the . + + A new with a shallow copy of the collection data. + + + + Determines whether a given is in the AppenderCollection. + + The to check for. + true if is found in the AppenderCollection; otherwise, false. + + + + Returns the zero-based index of the first occurrence of a + in the AppenderCollection. + + The to locate in the AppenderCollection. + + The zero-based index of the first occurrence of + in the entire AppenderCollection, if found; otherwise, -1. + + + + + Inserts an element into the AppenderCollection at the specified index. + + The zero-based index at which should be inserted. + The to insert. + + is less than zero + -or- + is equal to or greater than . + + + + + Removes the first occurrence of a specific from the AppenderCollection. + + The to remove from the AppenderCollection. + + The specified was not found in the AppenderCollection. + + + + + Removes the element at the specified index of the AppenderCollection. + + The zero-based index of the element to remove. + + is less than zero + -or- + is equal to or greater than . + + + + + Returns an enumerator that can iterate through the AppenderCollection. + + An for the entire AppenderCollection. + + + + Adds the elements of another AppenderCollection to the current AppenderCollection. + + The AppenderCollection whose elements should be added to the end of the current AppenderCollection. + The new of the AppenderCollection. + + + + Adds the elements of a array to the current AppenderCollection. + + The array whose elements should be added to the end of the AppenderCollection. + The new of the AppenderCollection. + + + + Adds the elements of a collection to the current AppenderCollection. + + The collection whose elements should be added to the end of the AppenderCollection. + The new of the AppenderCollection. + + + + Sets the capacity to the actual number of elements. + + + + + Return the collection elements as an array + + the array + + + + is less than zero + -or- + is equal to or greater than . + + + + + is less than zero + -or- + is equal to or greater than . + + + + + Gets the number of elements actually contained in the AppenderCollection. + + + + + Gets a value indicating whether access to the collection is synchronized (thread-safe). + + true if access to the ICollection is synchronized (thread-safe); otherwise, false. + + + + Gets an object that can be used to synchronize access to the collection. + + + + + Gets or sets the at the specified index. + + The zero-based index of the element to get or set. + + is less than zero + -or- + is equal to or greater than . + + + + + Gets a value indicating whether the collection has a fixed size. + + true if the collection has a fixed size; otherwise, false. The default is false + + + + Gets a value indicating whether the IList is read-only. + + true if the collection is read-only; otherwise, false. The default is false + + + + Gets or sets the number of elements the AppenderCollection can contain. + + + + + Supports type-safe iteration over a . + + + + + + Advances the enumerator to the next element in the collection. + + + true if the enumerator was successfully advanced to the next element; + false if the enumerator has passed the end of the collection. + + + The collection was modified after the enumerator was created. + + + + + Sets the enumerator to its initial position, before the first element in the collection. + + + + + Gets the current element in the collection. + + + + + Type visible only to our subclasses + Used to access protected constructor + + + + + + A value + + + + + Supports simple iteration over a . + + + + + + Initializes a new instance of the Enumerator class. + + + + + + Advances the enumerator to the next element in the collection. + + + true if the enumerator was successfully advanced to the next element; + false if the enumerator has passed the end of the collection. + + + The collection was modified after the enumerator was created. + + + + + Sets the enumerator to its initial position, before the first element in the collection. + + + + + Gets the current element in the collection. + + + + + + + + + Appends log events to the ASP.NET system. + + + + + Diagnostic information and tracing messages that you specify are appended to the output + of the page that is sent to the requesting browser. Optionally, you can view this information + from a separate trace viewer (Trace.axd) that displays trace information for every page in a + given application. + + + Trace statements are processed and displayed only when tracing is enabled. You can control + whether tracing is displayed to a page, to the trace viewer, or both. + + + The logging event is passed to the or + method depending on the level of the logging event. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Write the logging event to the ASP.NET trace + + the event to log + + + Write the logging event to the ASP.NET trace + HttpContext.Current.Trace + (). + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Buffers events and then forwards them to attached appenders. + + + + The events are buffered in this appender until conditions are + met to allow the appender to deliver the events to the attached + appenders. See for the + conditions that cause the buffer to be sent. + + The forwarding appender can be used to specify different + thresholds and filters for the same appender at different locations + within the hierarchy. + + + Nicko Cadell + Gert Driesen + + + + Interface for attaching appenders to objects. + + + + Interface for attaching, removing and retrieving appenders. + + + Nicko Cadell + Gert Driesen + + + + Attaches an appender. + + The appender to add. + + + Add the specified appender. The implementation may + choose to allow or deny duplicate appenders. + + + + + + Gets an attached appender with the specified name. + + The name of the appender to get. + + The appender with the name specified, or null if no appender with the + specified name is found. + + + + Returns an attached appender with the specified. + If no appender with the specified name is found null will be + returned. + + + + + + Removes all attached appenders. + + + + Removes and closes all attached appenders + + + + + + Removes the specified appender from the list of attached appenders. + + The appender to remove. + The appender removed from the list + + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + + Removes the appender with the specified name from the list of appenders. + + The name of the appender to remove. + The appender removed from the list + + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + + Gets all attached appenders. + + + A collection of attached appenders. + + + + Gets a collection of attached appenders. + If there are no attached appenders the + implementation should return an empty + collection rather than null. + + + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Closes the appender and releases resources. + + + + Releases any resources allocated within the appender such as file handles, + network connections, etc. + + + It is a programming error to append to a closed appender. + + + + + + Send the events. + + The events that need to be send. + + + Forwards the events to the attached appenders. + + + + + + Adds an to the list of appenders of this + instance. + + The to add to this appender. + + + If the specified is already in the list of + appenders, then it won't be added again. + + + + + + Looks for the appender with the specified name. + + The name of the appender to lookup. + + The appender with the specified name, or null. + + + + Get the named appender attached to this buffering appender. + + + + + + Removes all previously added appenders from this appender. + + + + This is useful when re-reading configuration information. + + + + + + Removes the specified appender from the list of appenders. + + The appender to remove. + The appender removed from the list + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + Removes the appender with the specified name from the list of appenders. + + The name of the appender to remove. + The appender removed from the list + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + Implementation of the interface + + + + + Gets the appenders contained in this appender as an + . + + + If no appenders can be found, then an + is returned. + + + A collection of the appenders in this appender. + + + + + Appends logging events to the console. + + + + ColoredConsoleAppender appends log events to the standard output stream + or the error output stream using a layout specified by the + user. It also allows the color of a specific type of message to be set. + + + By default, all output is written to the console's standard output stream. + The property can be set to direct the output to the + error stream. + + + NOTE: This appender writes directly to the application's attached console + not to the System.Console.Out or System.Console.Error TextWriter. + The System.Console.Out and System.Console.Error streams can be + programmatically redirected (for example NUnit does this to capture program output). + This appender will ignore these redirections because it needs to use Win32 + API calls to colorize the output. To respect these redirections the + must be used. + + + When configuring the colored console appender, mapping should be + specified to map a logging level to a color. For example: + + + + + + + + + + + + + + The Level is the standard log4net logging level and ForeColor and BackColor can be any + combination of the following values: + + Blue + Green + Red + White + Yellow + Purple + Cyan + HighIntensity + + + + Rick Hobbs + Nicko Cadell + + + + The to use when writing to the Console + standard output stream. + + + + The to use when writing to the Console + standard output stream. + + + + + + The to use when writing to the Console + standard error output stream. + + + + The to use when writing to the Console + standard error output stream. + + + + + + Initializes a new instance of the class. + + + The instance of the class is set up to write + to the standard output stream. + + + + + Initializes a new instance of the class + with the specified layout. + + the layout to use for this appender + + The instance of the class is set up to write + to the standard output stream. + + + + + Initializes a new instance of the class + with the specified layout. + + the layout to use for this appender + flag set to true to write to the console error stream + + When is set to true, output is written to + the standard error output stream. Otherwise, output is written to the standard + output stream. + + + + + Add a mapping of level to color - done by the config file + + The mapping to add + + + Add a mapping to this appender. + Each mapping defines the foreground and background colors + for a level. + + + + + + This method is called by the method. + + The event to log. + + + Writes the event to the console. + + + The format of the output will depend on the appender's layout. + + + + + + Initialize the options for this appender + + + + Initialize the level to color mappings set on this appender. + + + + + + Flag to write output to the error stream rather than the standard output stream + + + + + Mapping from level object to color value + + + + + The console output stream writer to write to + + + + This writer is not thread safe. + + + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + The enum of possible color values for use with the color mapping method + + + + The following flags can be combined together to + form the colors. + + + + + + + color is blue + + + + + color is green + + + + + color is red + + + + + color is white + + + + + color is yellow + + + + + color is purple + + + + + color is cyan + + + + + color is intensified + + + + + A class to act as a mapping between the level that a logging call is made at and + the color it should be displayed as. + + + + Defines the mapping between a level and the color it should be displayed in. + + + + + + Initialize the options for the object + + + + Combine the and together. + + + + + + The mapped foreground color for the specified level + + + + Required property. + The mapped foreground color for the specified level. + + + + + + The mapped background color for the specified level + + + + Required property. + The mapped background color for the specified level. + + + + + + The combined and suitable for + setting the console color. + + + + + Appends logging events to the console. + + + + ConsoleAppender appends log events to the standard output stream + or the error output stream using a layout specified by the + user. + + + By default, all output is written to the console's standard output stream. + The property can be set to direct the output to the + error stream. + + + NOTE: This appender writes each message to the System.Console.Out or + System.Console.Error that is set at the time the event is appended. + Therefore it is possible to programmatically redirect the output of this appender + (for example NUnit does this to capture program output). While this is the desired + behavior of this appender it may have security implications in your application. + + + Nicko Cadell + Gert Driesen + + + + The to use when writing to the Console + standard output stream. + + + + The to use when writing to the Console + standard output stream. + + + + + + The to use when writing to the Console + standard error output stream. + + + + The to use when writing to the Console + standard error output stream. + + + + + + Initializes a new instance of the class. + + + The instance of the class is set up to write + to the standard output stream. + + + + + Initializes a new instance of the class + with the specified layout. + + the layout to use for this appender + + The instance of the class is set up to write + to the standard output stream. + + + + + Initializes a new instance of the class + with the specified layout. + + the layout to use for this appender + flag set to true to write to the console error stream + + When is set to true, output is written to + the standard error output stream. Otherwise, output is written to the standard + output stream. + + + + + This method is called by the method. + + The event to log. + + + Writes the event to the console. + + + The format of the output will depend on the appender's layout. + + + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Appends log events to the system. + + + + The application configuration file can be used to control what listeners + are actually used. See the MSDN documentation for the + class for details on configuring the + debug system. + + + Events are written using the + method. The event's logger name is passed as the value for the category name to the Write method. + + + Nicko Cadell + + + + Initializes a new instance of the . + + + + Default constructor. + + + + + + Initializes a new instance of the + with a specified layout. + + The layout to use with this appender. + + + Obsolete constructor. + + + + + + Writes the logging event to the system. + + The event to log. + + + Writes the logging event to the system. + If is true then the + is called. + + + + + + Immediate flush means that the underlying writer or output stream + will be flushed at the end of each append operation. + + + + Immediate flush is slower but ensures that each append request is + actually written. If is set to + false, then there is a good chance that the last few + logs events are not actually written to persistent media if and + when the application crashes. + + + The default value is true. + + + + + Gets or sets a value that indicates whether the appender will + flush at the end of each write. + + + The default behavior is to flush at the end of each + write. If the option is set tofalse, then the underlying + stream can defer writing to physical medium to a later time. + + + Avoiding the flush operation at the end of each append results + in a performance gain of 10 to 20 percent. However, there is safety + trade-off involved in skipping flushing. Indeed, when flushing is + skipped, then it is likely that the last few log events will not + be recorded on disk when the application exits. This is a high + price to pay even for a 20% performance gain. + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Writes events to the system event log. + + + + The EventID of the event log entry can be + set using the EventLogEventID property () + on the . + + + There is a limit of 32K characters for an event log message + + + When configuring the EventLogAppender a mapping can be + specified to map a logging level to an event log entry type. For example: + + + <mapping> + <level value="ERROR" /> + <eventLogEntryType value="Error" /> + </mapping> + <mapping> + <level value="DEBUG" /> + <eventLogEntryType value="Information" /> + </mapping> + + + The Level is the standard log4net logging level and eventLogEntryType can be any value + from the enum, i.e.: + + Erroran error event + Warninga warning event + Informationan informational event + + + + Aspi Havewala + Douglas de la Torre + Nicko Cadell + Gert Driesen + Thomas Voss + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Initializes a new instance of the class + with the specified . + + The to use with this appender. + + + Obsolete constructor. + + + + + + Add a mapping of level to - done by the config file + + The mapping to add + + + Add a mapping to this appender. + Each mapping defines the event log entry type for a level. + + + + + + Initialize the appender based on the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Create an event log source + + + Uses different API calls under NET_2_0 + + + + + This method is called by the + method. + + the event to log + + Writes the event to the system event log using the + . + + If the event has an EventID property (see ) + set then this integer will be used as the event log event id. + + + There is a limit of 32K characters for an event log message + + + + + + Get the equivalent for a + + the Level to convert to an EventLogEntryType + The equivalent for a + + Because there are fewer applicable + values to use in logging levels than there are in the + this is a one way mapping. There is + a loss of information during the conversion. + + + + + The log name is the section in the event logs where the messages + are stored. + + + + + Name of the application to use when logging. This appears in the + application column of the event log named by . + + + + + The name of the machine which holds the event log. This is + currently only allowed to be '.' i.e. the current machine. + + + + + Mapping from level object to EventLogEntryType + + + + + The security context to use for privileged calls + + + + + The name of the log where messages will be stored. + + + The string name of the log where messages will be stored. + + + This is the name of the log as it appears in the Event Viewer + tree. The default value is to log into the Application + log, this is where most applications write their events. However + if you need a separate log for your application (or applications) + then you should set the appropriately. + This should not be used to distinguish your event log messages + from those of other applications, the + property should be used to distinguish events. This property should be + used to group together events into a single log. + + + + + + Property used to set the Application name. This appears in the + event logs when logging. + + + The string used to distinguish events from different sources. + + + Sets the event log source property. + + + + + This property is used to return the name of the computer to use + when accessing the event logs. Currently, this is the current + computer, denoted by a dot "." + + + The string name of the machine holding the event log that + will be logged into. + + + This property cannot be changed. It is currently set to '.' + i.e. the local machine. This may be changed in future. + + + + + Gets or sets the used to write to the EventLog. + + + The used to write to the EventLog. + + + + The system security context used to write to the EventLog. + + + Unless a specified here for this appender + the is queried for the + security context to use. The default behavior is to use the security context + of the current thread. + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + A class to act as a mapping between the level that a logging call is made at and + the color it should be displayed as. + + + + Defines the mapping between a level and its event log entry type. + + + + + + The for this entry + + + + Required property. + The for this entry + + + + + + Appends logging events to a file. + + + + Logging events are sent to the file specified by + the property. + + + The file can be opened in either append or overwrite mode + by specifying the property. + If the file path is relative it is taken as relative from + the application base directory. The file encoding can be + specified by setting the property. + + + The layout's and + values will be written each time the file is opened and closed + respectively. If the property is + then the file may contain multiple copies of the header and footer. + + + This appender will first try to open the file for writing when + is called. This will typically be during configuration. + If the file cannot be opened for writing the appender will attempt + to open the file again each time a message is logged to the appender. + If the file cannot be opened for writing when a message is logged then + the message will be discarded by this appender. + + + The supports pluggable file locking models via + the property. + The default behavior, implemented by + is to obtain an exclusive write lock on the file until this appender is closed. + The alternative model, , only holds a + write lock while the appender is writing a logging event. + + + Nicko Cadell + Gert Driesen + Rodrigo B. de Oliveira + Douglas de la Torre + Niall Daley + + + + Sends logging events to a . + + + + An Appender that writes to a . + + + This appender may be used stand alone if initialized with an appropriate + writer, however it is typically used as a base class for an appender that + can open a to write to. + + + Nicko Cadell + Gert Driesen + Douglas de la Torre + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Initializes a new instance of the class and + sets the output destination to a new initialized + with the specified . + + The layout to use with this appender. + The to output to. + + + Obsolete constructor. + + + + + + Initializes a new instance of the class and sets + the output destination to the specified . + + The layout to use with this appender + The to output to + + The must have been previously opened. + + + + Obsolete constructor. + + + + + + This method determines if there is a sense in attempting to append. + + + + This method checked if an output target has been set and if a + layout has been set. + + + false if any of the preconditions fail. + + + + This method is called by the + method. + + The event to log. + + + Writes a log statement to the output stream if the output stream exists + and is writable. + + + The format of the output will depend on the appender's layout. + + + + + + This method is called by the + method. + + The array of events to log. + + + This method writes all the bulk logged events to the output writer + before flushing the stream. + + + + + + Close this appender instance. The underlying stream or writer is also closed. + + + Closed appenders cannot be reused. + + + + + Writes the footer and closes the underlying . + + + + Writes the footer and closes the underlying . + + + + + + Closes the underlying . + + + + Closes the underlying . + + + + + + Clears internal references to the underlying + and other variables. + + + + Subclasses can override this method for an alternate closing behavior. + + + + + + Writes a footer as produced by the embedded layout's property. + + + + Writes a footer as produced by the embedded layout's property. + + + + + + Writes a header produced by the embedded layout's property. + + + + Writes a header produced by the embedded layout's property. + + + + + + Called to allow a subclass to lazily initialize the writer + + + + This method is called when an event is logged and the or + have not been set. This allows a subclass to + attempt to initialize the writer multiple times. + + + + + + This is the where logging events + will be written to. + + + + + Immediate flush means that the underlying + or output stream will be flushed at the end of each append operation. + + + + Immediate flush is slower but ensures that each append request is + actually written. If is set to + false, then there is a good chance that the last few + logging events are not actually persisted if and when the application + crashes. + + + The default value is true. + + + + + + Gets or set whether the appender will flush at the end + of each append operation. + + + + The default behavior is to flush at the end of each + append operation. + + + If this option is set to false, then the underlying + stream can defer persisting the logging event to a later + time. + + + + Avoiding the flush operation at the end of each append results in + a performance gain of 10 to 20 percent. However, there is safety + trade-off involved in skipping flushing. Indeed, when flushing is + skipped, then it is likely that the last few log events will not + be recorded on disk when the application exits. This is a high + price to pay even for a 20% performance gain. + + + + + Sets the where the log output will go. + + + + The specified must be open and writable. + + + The will be closed when the appender + instance is closed. + + + Note: Logging to an unopened will fail. + + + + + + Gets or set the and the underlying + , if any, for this appender. + + + The for this appender. + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Gets or sets the where logging events + will be written to. + + + The where logging events are written. + + + + This is the where logging events + will be written to. + + + + + + Default constructor + + + + Default constructor + + + + + + Construct a new appender using the layout, file and append mode. + + the layout to use with this appender + the full path to the file to write to + flag to indicate if the file should be appended to + + + Obsolete constructor. + + + + + + Construct a new appender using the layout and file specified. + The file will be appended to. + + the layout to use with this appender + the full path to the file to write to + + + Obsolete constructor. + + + + + + Activate the options on the file appender. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + This will cause the file to be opened. + + + + + + Closes any previously opened file and calls the parent's . + + + + Resets the filename and the file stream. + + + + + + Called to initialize the file writer + + + + Will be called for each logged message until the file is + successfully opened. + + + + + + This method is called by the + method. + + The event to log. + + + Writes a log statement to the output stream if the output stream exists + and is writable. + + + The format of the output will depend on the appender's layout. + + + + + + This method is called by the + method. + + The array of events to log. + + + Acquires the output file locks once before writing all the events to + the stream. + + + + + + Writes a footer as produced by the embedded layout's property. + + + + Writes a footer as produced by the embedded layout's property. + + + + + + Writes a header produced by the embedded layout's property. + + + + Writes a header produced by the embedded layout's property. + + + + + + Closes the underlying . + + + + Closes the underlying . + + + + + + Closes the previously opened file. + + + + Writes the to the file and then + closes the file. + + + + + + Sets and opens the file where the log output will go. The specified file must be writable. + + The path to the log file. Must be a fully qualified path. + If true will append to fileName. Otherwise will truncate fileName + + + Calls but guarantees not to throw an exception. + Errors are passed to the . + + + + + + Sets and opens the file where the log output will go. The specified file must be writable. + + The path to the log file. Must be a fully qualified path. + If true will append to fileName. Otherwise will truncate fileName + + + If there was already an opened file, then the previous file + is closed first. + + + This method will ensure that the directory structure + for the specified exists. + + + + + + Sets the quiet writer used for file output + + the file stream that has been opened for writing + + + This implementation of creates a + over the and passes it to the + method. + + + This method can be overridden by sub classes that want to wrap the + in some way, for example to encrypt the output + data using a System.Security.Cryptography.CryptoStream. + + + + + + Sets the quiet writer being used. + + the writer over the file stream that has been opened for writing + + + This method can be overridden by sub classes that want to + wrap the in some way. + + + + + + Convert a path into a fully qualified path. + + The path to convert. + The fully qualified path. + + + Converts the path specified to a fully + qualified path. If the path is relative it is + taken as relative from the application base + directory. + + + + + + Flag to indicate if we should append to the file + or overwrite the file. The default is to append. + + + + + The name of the log file. + + + + + The encoding to use for the file stream. + + + + + The security context to use for privileged calls + + + + + The stream to log to. Has added locking semantics + + + + + The locking model to use + + + + + Gets or sets the path to the file that logging will be written to. + + + The path to the file that logging will be written to. + + + + If the path is relative it is taken as relative from + the application base directory. + + + + + + Gets or sets a flag that indicates whether the file should be + appended to or overwritten. + + + Indicates whether the file should be appended to or overwritten. + + + + If the value is set to false then the file will be overwritten, if + it is set to true then the file will be appended to. + + The default value is true. + + + + + Gets or sets used to write to the file. + + + The used to write to the file. + + + + The default encoding set is + which is the encoding for the system's current ANSI code page. + + + + + + Gets or sets the used to write to the file. + + + The used to write to the file. + + + + Unless a specified here for this appender + the is queried for the + security context to use. The default behavior is to use the security context + of the current thread. + + + + + + Gets or sets the used to handle locking of the file. + + + The used to lock the file. + + + + Gets or sets the used to handle locking of the file. + + + There are two built in locking models, and . + The former locks the file from the start of logging to the end and the + later lock only for the minimal amount of time when logging each message. + + + The default locking model is the . + + + + + + Write only that uses the + to manage access to an underlying resource. + + + + + True asynchronous writes are not supported, the implementation forces a synchronous write. + + + + + Exception base type for log4net. + + + + This type extends . It + does not add any new functionality but does differentiate the + type of exception being thrown. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Constructor + + A message to include with the exception. + + + Initializes a new instance of the class with + the specified message. + + + + + + Constructor + + A message to include with the exception. + A nested exception to include. + + + Initializes a new instance of the class + with the specified message and inner exception. + + + + + + Serialization constructor + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + + + Initializes a new instance of the class + with serialized data. + + + + + + Locking model base class + + + + Base class for the locking models available to the derived loggers. + + + + + + Open the output file + + The filename to use + Whether to append to the file, or overwrite + The encoding to use + + + Open the file specified and prepare for logging. + No writes will be made until is called. + Must be called before any calls to , + and . + + + + + + Close the file + + + + Close the file. No further writes will be made. + + + + + + Acquire the lock on the file + + A stream that is ready to be written to. + + + Acquire the lock on the file in preparation for writing to it. + Return a stream pointing to the file. + must be called to release the lock on the output file. + + + + + + Release the lock on the file + + + + Release the lock on the file. No further writes will be made to the + stream until is called again. + + + + + + Gets or sets the for this LockingModel + + + The for this LockingModel + + + + The file appender this locking model is attached to and working on + behalf of. + + + The file appender is used to locate the security context and the error handler to use. + + + The value of this property will be set before is + called. + + + + + + Hold an exclusive lock on the output file + + + + Open the file once for writing and hold it open until is called. + Maintains an exclusive lock on the file during this time. + + + + + + Open the file specified and prepare for logging. + + The filename to use + Whether to append to the file, or overwrite + The encoding to use + + + Open the file specified and prepare for logging. + No writes will be made until is called. + Must be called before any calls to , + and . + + + + + + Close the file + + + + Close the file. No further writes will be made. + + + + + + Acquire the lock on the file + + A stream that is ready to be written to. + + + Does nothing. The lock is already taken + + + + + + Release the lock on the file + + + + Does nothing. The lock will be released when the file is closed. + + + + + + Acquires the file lock for each write + + + + Opens the file once for each / cycle, + thus holding the lock for the minimal amount of time. This method of locking + is considerably slower than but allows + other processes to move/delete the log file whilst logging continues. + + + + + + Prepares to open the file when the first message is logged. + + The filename to use + Whether to append to the file, or overwrite + The encoding to use + + + Open the file specified and prepare for logging. + No writes will be made until is called. + Must be called before any calls to , + and . + + + + + + Close the file + + + + Close the file. No further writes will be made. + + + + + + Acquire the lock on the file + + A stream that is ready to be written to. + + + Acquire the lock on the file in preparation for writing to it. + Return a stream pointing to the file. + must be called to release the lock on the output file. + + + + + + Release the lock on the file + + + + Release the lock on the file. No further writes will be made to the + stream until is called again. + + + + + + This appender forwards logging events to attached appenders. + + + + The forwarding appender can be used to specify different thresholds + and filters for the same appender at different locations within the hierarchy. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Closes the appender and releases resources. + + + + Releases any resources allocated within the appender such as file handles, + network connections, etc. + + + It is a programming error to append to a closed appender. + + + + + + Forward the logging event to the attached appenders + + The event to log. + + + Delivers the logging event to all the attached appenders. + + + + + + Forward the logging events to the attached appenders + + The array of events to log. + + + Delivers the logging events to all the attached appenders. + + + + + + Adds an to the list of appenders of this + instance. + + The to add to this appender. + + + If the specified is already in the list of + appenders, then it won't be added again. + + + + + + Looks for the appender with the specified name. + + The name of the appender to lookup. + + The appender with the specified name, or null. + + + + Get the named appender attached to this appender. + + + + + + Removes all previously added appenders from this appender. + + + + This is useful when re-reading configuration information. + + + + + + Removes the specified appender from the list of appenders. + + The appender to remove. + The appender removed from the list + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + Removes the appender with the specified name from the list of appenders. + + The name of the appender to remove. + The appender removed from the list + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + Implementation of the interface + + + + + Gets the appenders contained in this appender as an + . + + + If no appenders can be found, then an + is returned. + + + A collection of the appenders in this appender. + + + + + Logs events to a local syslog service. + + + + This appender uses the POSIX libc library functions openlog, syslog, and closelog. + If these functions are not available on the local system then this appender will not work! + + + The functions openlog, syslog, and closelog are specified in SUSv2 and + POSIX 1003.1-2001 standards. These are used to log messages to the local syslog service. + + + This appender talks to a local syslog service. If you need to log to a remote syslog + daemon and you cannot configure your local syslog service to do this you may be + able to use the to log via UDP. + + + Syslog messages must have a facility and and a severity. The severity + is derived from the Level of the logging event. + The facility must be chosen from the set of defined syslog + values. The facilities list is predefined + and cannot be extended. + + + An identifier is specified with each log message. This can be specified + by setting the property. The identity (also know + as the tag) must not contain white space. The default value for the + identity is the application name (from ). + + + Rob Lyon + Nicko Cadell + + + + Initializes a new instance of the class. + + + This instance of the class is set up to write + to a local syslog service. + + + + + Add a mapping of level to severity + + The mapping to add + + + Adds a to this appender. + + + + + + Initialize the appender based on the options set. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + This method is called by the method. + + The event to log. + + + Writes the event to a remote syslog daemon. + + + The format of the output will depend on the appender's layout. + + + + + + Close the syslog when the appender is closed + + + + Close the syslog when the appender is closed + + + + + + Translates a log4net level to a syslog severity. + + A log4net level. + A syslog severity. + + + Translates a log4net level to a syslog severity. + + + + + + Generate a syslog priority. + + The syslog facility. + The syslog severity. + A syslog priority. + + + + The facility. The default facility is . + + + + + The message identity + + + + + Marshaled handle to the identity string. We have to hold on to the + string as the openlog and syslog APIs just hold the + pointer to the ident and dereference it for each log message. + + + + + Mapping from level object to syslog severity + + + + + Open connection to system logger. + + + + + Generate a log message. + + + + The libc syslog method takes a format string and a variable argument list similar + to the classic printf function. As this type of vararg list is not supported + by C# we need to specify the arguments explicitly. Here we have specified the + format string with a single message argument. The caller must set the format + string to "%s". + + + + + + Close descriptor used to write to system logger. + + + + + Message identity + + + + An identifier is specified with each log message. This can be specified + by setting the property. The identity (also know + as the tag) must not contain white space. The default value for the + identity is the application name (from ). + + + + + + Syslog facility + + + Set to one of the values. The list of + facilities is predefined and cannot be extended. The default value + is . + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + syslog severities + + + + The log4net Level maps to a syslog severity using the + method and the + class. The severity is set on . + + + + + + system is unusable + + + + + action must be taken immediately + + + + + critical conditions + + + + + error conditions + + + + + warning conditions + + + + + normal but significant condition + + + + + informational + + + + + debug-level messages + + + + + syslog facilities + + + + The syslog facility defines which subsystem the logging comes from. + This is set on the property. + + + + + + kernel messages + + + + + random user-level messages + + + + + mail system + + + + + system daemons + + + + + security/authorization messages + + + + + messages generated internally by syslogd + + + + + line printer subsystem + + + + + network news subsystem + + + + + UUCP subsystem + + + + + clock (cron/at) daemon + + + + + security/authorization messages (private) + + + + + ftp daemon + + + + + NTP subsystem + + + + + log audit + + + + + log alert + + + + + clock daemon + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + A class to act as a mapping between the level that a logging call is made at and + the syslog severity that is should be logged at. + + + + A class to act as a mapping between the level that a logging call is made at and + the syslog severity that is should be logged at. + + + + + + The mapped syslog severity for the specified level + + + + Required property. + The mapped syslog severity for the specified level + + + + + + Stores logging events in an array. + + + + The memory appender stores all the logging events + that are appended in an in-memory array. + + + Use the method to get + the current list of events that have been appended. + + + Use the method to clear the + current list of events. + + + Julian Biddle + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Gets the events that have been logged. + + The events that have been logged + + + Gets the events that have been logged. + + + + + + This method is called by the method. + + the event to log + + Stores the in the events list. + + + + + Clear the list of events + + + Clear the list of events + + + + + The list of events that have been appended. + + + + + Value indicating which fields in the event should be fixed + + + By default all fields are fixed + + + + + Gets or sets a value indicating whether only part of the logging event + data should be fixed. + + + true if the appender should only fix part of the logging event + data, otherwise false. The default is false. + + + + Setting this property to true will cause only part of the event + data to be fixed and stored in the appender, hereby improving performance. + + + See for more information. + + + + + + Gets or sets the fields that will be fixed in the event + + + + The logging event needs to have certain thread specific values + captured before it can be buffered. See + for details. + + + + + + Logs entries by sending network messages using the + native function. + + + + You can send messages only to names that are active + on the network. If you send the message to a user name, + that user must be logged on and running the Messenger + service to receive the message. + + + The receiver will get a top most window displaying the + messages one at a time, therefore this appender should + not be used to deliver a high volume of messages. + + + The following table lists some possible uses for this appender : + + + + + Action + Property Value(s) + + + Send a message to a user account on the local machine + + + = <name of the local machine> + + + = <user name> + + + + + Send a message to a user account on a remote machine + + + = <name of the remote machine> + + + = <user name> + + + + + Send a message to a domain user account + + + = <name of a domain controller | uninitialized> + + + = <user name> + + + + + Send a message to all the names in a workgroup or domain + + + = <workgroup name | domain name>* + + + + + Send a message from the local machine to a remote machine + + + = <name of the local machine | uninitialized> + + + = <name of the remote machine> + + + + + + + Note : security restrictions apply for sending + network messages, see + for more information. + + + + + An example configuration section to log information + using this appender from the local machine, named + LOCAL_PC, to machine OPERATOR_PC : + + + + + + + + + + Nicko Cadell + Gert Driesen + + + + The DNS or NetBIOS name of the server on which the function is to execute. + + + + + The sender of the network message. + + + + + The message alias to which the message should be sent. + + + + + The security context to use for privileged calls + + + + + Initializes the appender. + + + The default constructor initializes all fields to their default values. + + + + + Initialize the appender based on the options set. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + The appender will be ignored if no was specified. + + + The required property was not specified. + + + + This method is called by the method. + + The event to log. + + + Sends the event using a network message. + + + + + + Sends a buffer of information to a registered message alias. + + The DNS or NetBIOS name of the server on which the function is to execute. + The message alias to which the message buffer should be sent + The originator of the message. + The message text. + The length, in bytes, of the message text. + + + The following restrictions apply for sending network messages: + + + + + Platform + Requirements + + + Windows NT + + + No special group membership is required to send a network message. + + + Admin, Accounts, Print, or Server Operator group membership is required to + successfully send a network message on a remote server. + + + + + Windows 2000 or later + + + If you send a message on a domain controller that is running Active Directory, + access is allowed or denied based on the access control list (ACL) for the securable + object. The default ACL permits only Domain Admins and Account Operators to send a network message. + + + On a member server or workstation, only Administrators and Server Operators can send a network message. + + + + + + + For more information see Security Requirements for the Network Management Functions. + + + + + If the function succeeds, the return value is zero. + + + + + + Gets or sets the sender of the message. + + + The sender of the message. + + + If this property is not specified, the message is sent from the local computer. + + + + + Gets or sets the message alias to which the message should be sent. + + + The recipient of the message. + + + This property should always be specified in order to send a message. + + + + + Gets or sets the DNS or NetBIOS name of the remote server on which the function is to execute. + + + DNS or NetBIOS name of the remote server on which the function is to execute. + + + + For Windows NT 4.0 and earlier, the string should begin with \\. + + + If this property is not specified, the local computer is used. + + + + + + Gets or sets the used to call the NetSend method. + + + The used to call the NetSend method. + + + + Unless a specified here for this appender + the is queried for the + security context to use. The default behavior is to use the security context + of the current thread. + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Appends log events to the OutputDebugString system. + + + + OutputDebugStringAppender appends log events to the + OutputDebugString system. + + + The string is passed to the native OutputDebugString + function. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Write the logging event to the output debug string API + + the event to log + + + Write the logging event to the output debug string API + + + + + + Stub for OutputDebugString native method + + the string to output + + + Stub for OutputDebugString native method + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Logs events to a remote syslog daemon. + + + + The BSD syslog protocol is used to remotely log to + a syslog daemon. The syslogd listens for for messages + on UDP port 514. + + + The syslog UDP protocol is not authenticated. Most syslog daemons + do not accept remote log messages because of the security implications. + You may be able to use the LocalSyslogAppender to talk to a local + syslog service. + + + There is an RFC 3164 that claims to document the BSD Syslog Protocol. + This RFC can be seen here: http://www.faqs.org/rfcs/rfc3164.html. + This appender generates what the RFC calls an "Original Device Message", + i.e. does not include the TIMESTAMP or HOSTNAME fields. By observation + this format of message will be accepted by all current syslog daemon + implementations. The daemon will attach the current time and the source + hostname or IP address to any messages received. + + + Syslog messages must have a facility and and a severity. The severity + is derived from the Level of the logging event. + The facility must be chosen from the set of defined syslog + values. The facilities list is predefined + and cannot be extended. + + + An identifier is specified with each log message. This can be specified + by setting the property. The identity (also know + as the tag) must not contain white space. The default value for the + identity is the application name (from ). + + + Rob Lyon + Nicko Cadell + + + + Sends logging events as connectionless UDP datagrams to a remote host or a + multicast group using an . + + + + UDP guarantees neither that messages arrive, nor that they arrive in the correct order. + + + To view the logging results, a custom application can be developed that listens for logging + events. + + + When decoding events send via this appender remember to use the same encoding + to decode the events as was used to send the events. See the + property to specify the encoding to use. + + + + This example shows how to log receive logging events that are sent + on IP address 244.0.0.1 and port 8080 to the console. The event is + encoded in the packet as a unicode string and it is decoded as such. + + IPEndPoint remoteEndPoint = new IPEndPoint(IPAddress.Any, 0); + UdpClient udpClient; + byte[] buffer; + string loggingEvent; + + try + { + udpClient = new UdpClient(8080); + + while(true) + { + buffer = udpClient.Receive(ref remoteEndPoint); + loggingEvent = System.Text.Encoding.Unicode.GetString(buffer); + Console.WriteLine(loggingEvent); + } + } + catch(Exception e) + { + Console.WriteLine(e.ToString()); + } + + + Dim remoteEndPoint as IPEndPoint + Dim udpClient as UdpClient + Dim buffer as Byte() + Dim loggingEvent as String + + Try + remoteEndPoint = new IPEndPoint(IPAddress.Any, 0) + udpClient = new UdpClient(8080) + + While True + buffer = udpClient.Receive(ByRef remoteEndPoint) + loggingEvent = System.Text.Encoding.Unicode.GetString(buffer) + Console.WriteLine(loggingEvent) + Wend + Catch e As Exception + Console.WriteLine(e.ToString()) + End Try + + + An example configuration section to log information using this appender to the + IP 224.0.0.1 on port 8080: + + + + + + + + + + Gert Driesen + Nicko Cadell + + + + Initializes a new instance of the class. + + + The default constructor initializes all fields to their default values. + + + + + Initialize the appender based on the options set. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + The appender will be ignored if no was specified or + an invalid remote or local TCP port number was specified. + + + The required property was not specified. + The TCP port number assigned to or is less than or greater than . + + + + This method is called by the method. + + The event to log. + + + Sends the event using an UDP datagram. + + + Exceptions are passed to the . + + + + + + Closes the UDP connection and releases all resources associated with + this instance. + + + + Disables the underlying and releases all managed + and unmanaged resources associated with the . + + + + + + Initializes the underlying connection. + + + + The underlying is initialized and binds to the + port number from which you intend to communicate. + + + Exceptions are passed to the . + + + + + + The IP address of the remote host or multicast group to which + the logging event will be sent. + + + + + The TCP port number of the remote host or multicast group to + which the logging event will be sent. + + + + + The cached remote endpoint to which the logging events will be sent. + + + + + The TCP port number from which the will communicate. + + + + + The instance that will be used for sending the + logging events. + + + + + The encoding to use for the packet. + + + + + Gets or sets the IP address of the remote host or multicast group to which + the underlying should sent the logging event. + + + The IP address of the remote host or multicast group to which the logging event + will be sent. + + + + Multicast addresses are identified by IP class D addresses (in the range 224.0.0.0 to + 239.255.255.255). Multicast packets can pass across different networks through routers, so + it is possible to use multicasts in an Internet scenario as long as your network provider + supports multicasting. + + + Hosts that want to receive particular multicast messages must register their interest by joining + the multicast group. Multicast messages are not sent to networks where no host has joined + the multicast group. Class D IP addresses are used for multicast groups, to differentiate + them from normal host addresses, allowing nodes to easily detect if a message is of interest. + + + Static multicast addresses that are needed globally are assigned by IANA. A few examples are listed in the table below: + + + + + IP Address + Description + + + 224.0.0.1 + + + Sends a message to all system on the subnet. + + + + + 224.0.0.2 + + + Sends a message to all routers on the subnet. + + + + + 224.0.0.12 + + + The DHCP server answers messages on the IP address 224.0.0.12, but only on a subnet. + + + + + + + A complete list of actually reserved multicast addresses and their owners in the ranges + defined by RFC 3171 can be found at the IANA web site. + + + The address range 239.0.0.0 to 239.255.255.255 is reserved for administrative scope-relative + addresses. These addresses can be reused with other local groups. Routers are typically + configured with filters to prevent multicast traffic in this range from flowing outside + of the local network. + + + + + + Gets or sets the TCP port number of the remote host or multicast group to which + the underlying should sent the logging event. + + + An integer value in the range to + indicating the TCP port number of the remote host or multicast group to which the logging event + will be sent. + + + The underlying will send messages to this TCP port number + on the remote host or multicast group. + + The value specified is less than or greater than . + + + + Gets or sets the TCP port number from which the underlying will communicate. + + + An integer value in the range to + indicating the TCP port number from which the underlying will communicate. + + + + The underlying will bind to this port for sending messages. + + + Setting the value to 0 (the default) will cause the udp client not to bind to + a local port. + + + The value specified is less than or greater than . + + + + Gets or sets used to write the packets. + + + The used to write the packets. + + + + The used to write the packets. + + + + + + Gets or sets the underlying . + + + The underlying . + + + creates a to send logging events + over a network. Classes deriving from can use this + property to get or set this . Use the underlying + returned from if you require access beyond that which + provides. + + + + + Gets or sets the cached remote endpoint to which the logging events should be sent. + + + The cached remote endpoint to which the logging events will be sent. + + + The method will initialize the remote endpoint + with the values of the and + properties. + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Syslog port 514 + + + + + Initializes a new instance of the class. + + + This instance of the class is set up to write + to a remote syslog daemon. + + + + + Add a mapping of level to severity + + The mapping to add + + + Add a mapping to this appender. + + + + + + This method is called by the method. + + The event to log. + + + Writes the event to a remote syslog daemon. + + + The format of the output will depend on the appender's layout. + + + + + + Initialize the options for this appender + + + + Initialize the level to syslog severity mappings set on this appender. + + + + + + Translates a log4net level to a syslog severity. + + A log4net level. + A syslog severity. + + + Translates a log4net level to a syslog severity. + + + + + + Generate a syslog priority. + + The syslog facility. + The syslog severity. + A syslog priority. + + + Generate a syslog priority. + + + + + + The facility. The default facility is . + + + + + The message identity + + + + + Mapping from level object to syslog severity + + + + + Message identity + + + + An identifier is specified with each log message. This can be specified + by setting the property. The identity (also know + as the tag) must not contain white space. The default value for the + identity is the application name (from ). + + + + + + Syslog facility + + + Set to one of the values. The list of + facilities is predefined and cannot be extended. The default value + is . + + + + + syslog severities + + + + The syslog severities. + + + + + + system is unusable + + + + + action must be taken immediately + + + + + critical conditions + + + + + error conditions + + + + + warning conditions + + + + + normal but significant condition + + + + + informational + + + + + debug-level messages + + + + + syslog facilities + + + + The syslog facilities + + + + + + kernel messages + + + + + random user-level messages + + + + + mail system + + + + + system daemons + + + + + security/authorization messages + + + + + messages generated internally by syslogd + + + + + line printer subsystem + + + + + network news subsystem + + + + + UUCP subsystem + + + + + clock (cron/at) daemon + + + + + security/authorization messages (private) + + + + + ftp daemon + + + + + NTP subsystem + + + + + log audit + + + + + log alert + + + + + clock daemon + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + A class to act as a mapping between the level that a logging call is made at and + the syslog severity that is should be logged at. + + + + A class to act as a mapping between the level that a logging call is made at and + the syslog severity that is should be logged at. + + + + + + The mapped syslog severity for the specified level + + + + Required property. + The mapped syslog severity for the specified level + + + + + + Delivers logging events to a remote logging sink. + + + + This Appender is designed to deliver events to a remote sink. + That is any object that implements the + interface. It delivers the events using .NET remoting. The + object to deliver events to is specified by setting the + appenders property. + + The RemotingAppender buffers events before sending them. This allows it to + make more efficient use of the remoting infrastructure. + + Once the buffer is full the events are still not sent immediately. + They are scheduled to be sent using a pool thread. The effect is that + the send occurs asynchronously. This is very important for a + number of non obvious reasons. The remoting infrastructure will + flow thread local variables (stored in the ), + if they are marked as , across the + remoting boundary. If the server is not contactable then + the remoting infrastructure will clear the + objects from the . To prevent a logging failure from + having side effects on the calling application the remoting call must be made + from a separate thread to the one used by the application. A + thread is used for this. If no thread is available then + the events will block in the thread pool manager until a thread is available. + + Because the events are sent asynchronously using pool threads it is possible to close + this appender before all the queued events have been sent. + When closing the appender attempts to wait until all the queued events have been sent, but + this will timeout after 30 seconds regardless. + + If this appender is being closed because the + event has fired it may not be possible to send all the queued events. During process + exit the runtime limits the time that a + event handler is allowed to run for. If the runtime terminates the threads before + the queued events have been sent then they will be lost. To ensure that all events + are sent the appender must be closed before the application exits. See + for details on how to shutdown + log4net programmatically. + + + Nicko Cadell + Gert Driesen + Daniel Cazzulino + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Initialize the appender based on the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Send the contents of the buffer to the remote sink. + + + The events are not sent immediately. They are scheduled to be sent + using a pool thread. The effect is that the send occurs asynchronously. + This is very important for a number of non obvious reasons. The remoting + infrastructure will flow thread local variables (stored in the ), + if they are marked as , across the + remoting boundary. If the server is not contactable then + the remoting infrastructure will clear the + objects from the . To prevent a logging failure from + having side effects on the calling application the remoting call must be made + from a separate thread to the one used by the application. A + thread is used for this. If no thread is available then + the events will block in the thread pool manager until a thread is available. + + The events to send. + + + + Override base class close. + + + + This method waits while there are queued work items. The events are + sent asynchronously using work items. These items + will be sent once a thread pool thread is available to send them, therefore + it is possible to close the appender before all the queued events have been + sent. + + This method attempts to wait until all the queued events have been sent, but this + method will timeout after 30 seconds regardless. + + If the appender is being closed because the + event has fired it may not be possible to send all the queued events. During process + exit the runtime limits the time that a + event handler is allowed to run for. + + + + + A work item is being queued into the thread pool + + + + + A work item from the thread pool has completed + + + + + Send the contents of the buffer to the remote sink. + + + This method is designed to be used with the . + This method expects to be passed an array of + objects in the state param. + + the logging events to send + + + + The URL of the remote sink. + + + + + The local proxy (.NET remoting) for the remote logging sink. + + + + + The number of queued callbacks currently waiting or executing + + + + + Event used to signal when there are no queued work items + + + This event is set when there are no queued work items. In this + state it is safe to close the appender. + + + + + Gets or sets the URL of the well-known object that will accept + the logging events. + + + The well-known URL of the remote sink. + + + + The URL of the remoting sink that will accept logging events. + The sink must implement the + interface. + + + + + + Interface used to deliver objects to a remote sink. + + + This interface must be implemented by a remoting sink + if the is to be used + to deliver logging events to the sink. + + + + + Delivers logging events to the remote sink + + Array of events to log. + + + Delivers logging events to the remote sink + + + + + + Appender that rolls log files based on size or date or both. + + + + RollingFileAppender can roll log files based on size or date or both + depending on the setting of the property. + When set to the log file will be rolled + once its size exceeds the . + When set to the log file will be rolled + once the date boundary specified in the property + is crossed. + When set to the log file will be + rolled once the date boundary specified in the property + is crossed, but within a date boundary the file will also be rolled + once its size exceeds the . + When set to the log file will be rolled when + the appender is configured. This effectively means that the log file can be + rolled once per program execution. + + + A of few additional optional features have been added: + + Attach date pattern for current log file + Backup number increments for newer files + Infinite number of backups by file size + + + + + + For large or infinite numbers of backup files a + greater than zero is highly recommended, otherwise all the backup files need + to be renamed each time a new backup is created. + + + When Date/Time based rolling is used setting + to will reduce the number of file renamings to few or none. + + + + + + Changing or without clearing + the log file directory of backup files will cause unexpected and unwanted side effects. + + + + + If Date/Time based rolling is enabled this appender will attempt to roll existing files + in the directory without a Date/Time tag based on the last write date of the base log file. + The appender only rolls the log file when a message is logged. If Date/Time based rolling + is enabled then the appender will not roll the log file at the Date/Time boundary but + at the point when the next message is logged after the boundary has been crossed. + + + + The extends the and + has the same behavior when opening the log file. + The appender will first try to open the file for writing when + is called. This will typically be during configuration. + If the file cannot be opened for writing the appender will attempt + to open the file again each time a message is logged to the appender. + If the file cannot be opened for writing when a message is logged then + the message will be discarded by this appender. + + + When rolling a backup file necessitates deleting an older backup file the + file to be deleted is moved to a temporary name before being deleted. + + + + + A maximum number of backup files when rolling on date/time boundaries is not supported. + + + + Nicko Cadell + Gert Driesen + Aspi Havewala + Douglas de la Torre + Edward Smit + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Sets the quiet writer being used. + + + This method can be overridden by sub classes. + + the writer to set + + + + Write out a logging event. + + the event to write to file. + + + Handles append time behavior for RollingFileAppender. This checks + if a roll over either by date (checked first) or time (checked second) + is need and then appends to the file last. + + + + + + Write out an array of logging events. + + the events to write to file. + + + Handles append time behavior for RollingFileAppender. This checks + if a roll over either by date (checked first) or time (checked second) + is need and then appends to the file last. + + + + + + Performs any required rolling before outputting the next event + + + + Handles append time behavior for RollingFileAppender. This checks + if a roll over either by date (checked first) or time (checked second) + is need and then appends to the file last. + + + + + + Creates and opens the file for logging. If + is false then the fully qualified name is determined and used. + + the name of the file to open + true to append to existing file + + This method will ensure that the directory structure + for the specified exists. + + + + + Get the current output file name + + the base file name + the output file name + + The output file name is based on the base fileName specified. + If is set then the output + file name is the same as the base file passed in. Otherwise + the output file depends on the date pattern, on the count + direction or both. + + + + + Determines curSizeRollBackups (only within the current roll point) + + + + + Generates a wildcard pattern that can be used to find all files + that are similar to the base file name. + + + + + + + Builds a list of filenames for all files matching the base filename plus a file + pattern. + + + + + + + Initiates a roll over if needed for crossing a date boundary since the last run. + + + + + Initializes based on existing conditions at time of . + + + + Initializes based on existing conditions at time of . + The following is done + + determine curSizeRollBackups (only within the current roll point) + initiates a roll over if needed for crossing a date boundary since the last run. + + + + + + + Does the work of bumping the 'current' file counter higher + to the highest count when an incremental file name is seen. + The highest count is either the first file (when count direction + is greater than 0) or the last file (when count direction less than 0). + In either case, we want to know the highest count that is present. + + + + + + + Takes a list of files and a base file name, and looks for + 'incremented' versions of the base file. Bumps the max + count up to the highest count seen. + + + + + + + Calculates the RollPoint for the datePattern supplied. + + the date pattern to calculate the check period for + The RollPoint that is most accurate for the date pattern supplied + + Essentially the date pattern is examined to determine what the + most suitable roll point is. The roll point chosen is the roll point + with the smallest period that can be detected using the date pattern + supplied. i.e. if the date pattern only outputs the year, month, day + and hour then the smallest roll point that can be detected would be + and hourly roll point as minutes could not be detected. + + + + + Initialize the appender based on the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + Sets initial conditions including date/time roll over information, first check, + scheduledFilename, and calls to initialize + the current number of backups. + + + + + + Rollover the file(s) to date/time tagged file(s). + + set to true if the file to be rolled is currently open + + + Rollover the file(s) to date/time tagged file(s). + Resets curSizeRollBackups. + If fileIsOpen is set then the new file is opened (through SafeOpenFile). + + + + + + Renames file to file . + + Name of existing file to roll. + New name for file. + + + Renames file to file . It + also checks for existence of target file and deletes if it does. + + + + + + Test if a file exists at a specified path + + the path to the file + true if the file exists + + + Test if a file exists at a specified path + + + + + + Deletes the specified file if it exists. + + The file to delete. + + + Delete a file if is exists. + The file is first moved to a new filename then deleted. + This allows the file to be removed even when it cannot + be deleted, but it still can be moved. + + + + + + Implements file roll base on file size. + + + + If the maximum number of size based backups is reached + (curSizeRollBackups == maxSizeRollBackups) then the oldest + file is deleted -- its index determined by the sign of countDirection. + If countDirection < 0, then files + {File.1, ..., File.curSizeRollBackups -1} + are renamed to {File.2, ..., + File.curSizeRollBackups}. Moreover, File is + renamed File.1 and closed. + + + A new file is created to receive further log output. + + + If maxSizeRollBackups is equal to zero, then the + File is truncated with no backup files created. + + + If maxSizeRollBackups < 0, then File is + renamed if needed and no files are deleted. + + + + + + Implements file roll. + + the base name to rename + + + If the maximum number of size based backups is reached + (curSizeRollBackups == maxSizeRollBackups) then the oldest + file is deleted -- its index determined by the sign of countDirection. + If countDirection < 0, then files + {File.1, ..., File.curSizeRollBackups -1} + are renamed to {File.2, ..., + File.curSizeRollBackups}. + + + If maxSizeRollBackups is equal to zero, then the + File is truncated with no backup files created. + + + If maxSizeRollBackups < 0, then File is + renamed if needed and no files are deleted. + + + This is called by to rename the files. + + + + + + Get the start time of the next window for the current rollpoint + + the current date + the type of roll point we are working with + the start time for the next roll point an interval after the currentDateTime date + + + Returns the date of the next roll point after the currentDateTime date passed to the method. + + + The basic strategy is to subtract the time parts that are less significant + than the rollpoint from the current time. This should roll the time back to + the start of the time window for the current rollpoint. Then we add 1 window + worth of time and get the start time of the next window for the rollpoint. + + + + + + This object supplies the current date/time. Allows test code to plug in + a method to control this class when testing date/time based rolling. + + + + + The date pattern. By default, the pattern is set to ".yyyy-MM-dd" + meaning daily rollover. + + + + + The actual formatted filename that is currently being written to + or will be the file transferred to on roll over + (based on staticLogFileName). + + + + + The timestamp when we shall next recompute the filename. + + + + + Holds date of last roll over + + + + + The type of rolling done + + + + + The default maximum file size is 10MB + + + + + There is zero backup files by default + + + + + How many sized based backups have been made so far + + + + + The rolling file count direction. + + + + + The rolling mode used in this appender. + + + + + Cache flag set if we are rolling by date. + + + + + Cache flag set if we are rolling by size. + + + + + Value indicating whether to always log to the same file. + + + + + FileName provided in configuration. Used for rolling properly + + + + + The 1st of January 1970 in UTC + + + + + Gets or sets the date pattern to be used for generating file names + when rolling over on date. + + + The date pattern to be used for generating file names when rolling + over on date. + + + + Takes a string in the same format as expected by + . + + + This property determines the rollover schedule when rolling over + on date. + + + + + + Gets or sets the maximum number of backup files that are kept before + the oldest is erased. + + + The maximum number of backup files that are kept before the oldest is + erased. + + + + If set to zero, then there will be no backup files and the log file + will be truncated when it reaches . + + + If a negative number is supplied then no deletions will be made. Note + that this could result in very slow performance as a large number of + files are rolled over unless is used. + + + The maximum applies to each time based group of files and + not the total. + + + + + + Gets or sets the maximum size that the output file is allowed to reach + before being rolled over to backup files. + + + The maximum size in bytes that the output file is allowed to reach before being + rolled over to backup files. + + + + This property is equivalent to except + that it is required for differentiating the setter taking a + argument from the setter taking a + argument. + + + The default maximum file size is 10MB (10*1024*1024). + + + + + + Gets or sets the maximum size that the output file is allowed to reach + before being rolled over to backup files. + + + The maximum size that the output file is allowed to reach before being + rolled over to backup files. + + + + This property allows you to specify the maximum size with the + suffixes "KB", "MB" or "GB" so that the size is interpreted being + expressed respectively in kilobytes, megabytes or gigabytes. + + + For example, the value "10KB" will be interpreted as 10240 bytes. + + + The default maximum file size is 10MB. + + + If you have the option to set the maximum file size programmatically + consider using the property instead as this + allows you to set the size in bytes as a . + + + + + + Gets or sets the rolling file count direction. + + + The rolling file count direction. + + + + Indicates if the current file is the lowest numbered file or the + highest numbered file. + + + By default newer files have lower numbers ( < 0), + i.e. log.1 is most recent, log.5 is the 5th backup, etc... + + + >= 0 does the opposite i.e. + log.1 is the first backup made, log.5 is the 5th backup made, etc. + For infinite backups use >= 0 to reduce + rollover costs. + + The default file count direction is -1. + + + + + Gets or sets the rolling style. + + The rolling style. + + + The default rolling style is . + + + When set to this appender's + property is set to false, otherwise + the appender would append to a single file rather than rolling + the file each time it is opened. + + + + + + Gets or sets a value indicating whether to always log to + the same file. + + + true if always should be logged to the same file, otherwise false. + + + + By default file.log is always the current file. Optionally + file.log.yyyy-mm-dd for current formatted datePattern can by the currently + logging file (or file.log.curSizeRollBackup or even + file.log.yyyy-mm-dd.curSizeRollBackup). + + + This will make time based rollovers with a large number of backups + much faster as the appender it won't have to rename all the backups! + + + + + + Style of rolling to use + + + + Style of rolling to use + + + + + + Roll files once per program execution + + + + Roll files once per program execution. + Well really once each time this appender is + configured. + + + Setting this option also sets AppendToFile to + false on the RollingFileAppender, otherwise + this appender would just be a normal file appender. + + + + + + Roll files based only on the size of the file + + + + + Roll files based only on the date + + + + + Roll files based on both the size and date of the file + + + + + The code assumes that the following 'time' constants are in a increasing sequence. + + + + The code assumes that the following 'time' constants are in a increasing sequence. + + + + + + Roll the log not based on the date + + + + + Roll the log for each minute + + + + + Roll the log for each hour + + + + + Roll the log twice a day (midday and midnight) + + + + + Roll the log each day (midnight) + + + + + Roll the log each week + + + + + Roll the log each month + + + + + This interface is used to supply Date/Time information to the . + + + This interface is used to supply Date/Time information to the . + Used primarily to allow test classes to plug themselves in so they can + supply test date/times. + + + + + Gets the current time. + + The current time. + + + Gets the current time. + + + + + + Default implementation of that returns the current time. + + + + + Gets the current time. + + The current time. + + + Gets the current time. + + + + + + Send an e-mail when a specific logging event occurs, typically on errors + or fatal errors. + + + + The number of logging events delivered in this e-mail depend on + the value of option. The + keeps only the last + logging events in its + cyclic buffer. This keeps memory requirements at a reasonable level while + still delivering useful application context. + + + Authentication and setting the server Port are only available on the MS .NET 1.1 runtime. + For these features to be enabled you need to ensure that you are using a version of + the log4net assembly that is built against the MS .NET 1.1 framework and that you are + running the your application on the MS .NET 1.1 runtime. On all other platforms only sending + unauthenticated messages to a server listening on port 25 (the default) is supported. + + + Authentication is supported by setting the property to + either or . + If using authentication then the + and properties must also be set. + + + To set the SMTP server port use the property. The default port is 25. + + + Nicko Cadell + Gert Driesen + + + + Default constructor + + + + Default constructor + + + + + + Sends the contents of the cyclic buffer as an e-mail message. + + The logging events to send. + + + + Send the email message + + the body text to include in the mail + + + + Gets or sets a semicolon-delimited list of recipient e-mail addresses. + + + A semicolon-delimited list of e-mail addresses. + + + + A semicolon-delimited list of recipient e-mail addresses. + + + + + + Gets or sets the e-mail address of the sender. + + + The e-mail address of the sender. + + + + The e-mail address of the sender. + + + + + + Gets or sets the subject line of the e-mail message. + + + The subject line of the e-mail message. + + + + The subject line of the e-mail message. + + + + + + Gets or sets the name of the SMTP relay mail server to use to send + the e-mail messages. + + + The name of the e-mail relay server. If SmtpServer is not set, the + name of the local SMTP server is used. + + + + The name of the e-mail relay server. If SmtpServer is not set, the + name of the local SMTP server is used. + + + + + + Obsolete + + + Use the BufferingAppenderSkeleton Fix methods instead + + + + Obsolete property. + + + + + + The mode to use to authentication with the SMTP server + + + Authentication is only available on the MS .NET 1.1 runtime. + + Valid Authentication mode values are: , + , and . + The default value is . When using + you must specify the + and to use to authenticate. + When using the Windows credentials for the current + thread, if impersonating, or the process will be used to authenticate. + + + + + + The username to use to authenticate with the SMTP server + + + Authentication is only available on the MS .NET 1.1 runtime. + + A and must be specified when + is set to , + otherwise the username will be ignored. + + + + + + The password to use to authenticate with the SMTP server + + + Authentication is only available on the MS .NET 1.1 runtime. + + A and must be specified when + is set to , + otherwise the password will be ignored. + + + + + + The port on which the SMTP server is listening + + + Server Port is only available on the MS .NET 1.1 runtime. + + The port on which the SMTP server is listening. The default + port is 25. The Port can only be changed when running on + the MS .NET 1.1 runtime. + + + + + + Gets or sets the priority of the e-mail message + + + One of the values. + + + + Sets the priority of the e-mails generated by this + appender. The default priority is . + + + If you are using this appender to report errors then + you may want to set the priority to . + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Values for the property. + + + + SMTP authentication modes. + + + + + + No authentication + + + + + Basic authentication. + + + Requires a username and password to be supplied + + + + + Integrated authentication + + + Uses the Windows credentials from the current thread or process to authenticate. + + + + + Send an email when a specific logging event occurs, typically on errors + or fatal errors. Rather than sending via smtp it writes a file into the + directory specified by . This allows services such + as the IIS SMTP agent to manage sending the messages. + + + + The configuration for this appender is identical to that of the SMTPAppender, + except that instead of specifying the SMTPAppender.SMTPHost you specify + . + + + The number of logging events delivered in this e-mail depend on + the value of option. The + keeps only the last + logging events in its + cyclic buffer. This keeps memory requirements at a reasonable level while + still delivering useful application context. + + + Niall Daley + Nicko Cadell + + + + Default constructor + + + + Default constructor + + + + + + Sends the contents of the cyclic buffer as an e-mail message. + + The logging events to send. + + + Sends the contents of the cyclic buffer as an e-mail message. + + + + + + Activate the options on this appender. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Convert a path into a fully qualified path. + + The path to convert. + The fully qualified path. + + + Converts the path specified to a fully + qualified path. If the path is relative it is + taken as relative from the application base + directory. + + + + + + The security context to use for privileged calls + + + + + Gets or sets a semicolon-delimited list of recipient e-mail addresses. + + + A semicolon-delimited list of e-mail addresses. + + + + A semicolon-delimited list of e-mail addresses. + + + + + + Gets or sets the e-mail address of the sender. + + + The e-mail address of the sender. + + + + The e-mail address of the sender. + + + + + + Gets or sets the subject line of the e-mail message. + + + The subject line of the e-mail message. + + + + The subject line of the e-mail message. + + + + + + Gets or sets the path to write the messages to. + + + + Gets or sets the path to write the messages to. This should be the same + as that used by the agent sending the messages. + + + + + + Gets or sets the used to write to the pickup directory. + + + The used to write to the pickup directory. + + + + Unless a specified here for this appender + the is queried for the + security context to use. The default behavior is to use the security context + of the current thread. + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Appender that allows clients to connect via Telnet to receive log messages + + + + The TelnetAppender accepts socket connections and streams logging messages + back to the client. + The output is provided in a telnet-friendly way so that a log can be monitored + over a TCP/IP socket. + This allows simple remote monitoring of application logging. + + + The default is 23 (the telnet port). + + + Keith Long + Nicko Cadell + + + + Default constructor + + + + Default constructor + + + + + + Overrides the parent method to close the socket handler + + + + Closes all the outstanding connections. + + + + + + Initialize the appender based on the options set. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + Create the socket handler and wait for connections + + + + + + Writes the logging event to each connected client. + + The event to log. + + + Writes the logging event to each connected client. + + + + + + Gets or sets the TCP port number on which this will listen for connections. + + + An integer value in the range to + indicating the TCP port number on which this will listen for connections. + + + + The default value is 23 (the telnet port). + + + The value specified is less than + or greater than . + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Helper class to manage connected clients + + + + The SocketHandler class is used to accept connections from + clients. It is threaded so that clients can connect/disconnect + asynchronously. + + + + + + Opens a new server port on + + the local port to listen on for connections + + + Creates a socket handler on the specified local server port. + + + + + + Sends a string message to each of the connected clients + + the text to send + + + Sends a string message to each of the connected clients + + + + + + Add a client to the internal clients list + + client to add + + + + Remove a client from the internal clients list + + client to remove + + + + Callback used to accept a connection on the server socket + + The result of the asynchronous operation + + + On connection adds to the list of connections + if there are two many open connections you will be disconnected + + + + + + Close all network connections + + + + Make sure we close all network connections + + + + + + Test if this handler has active connections + + + true if this handler has active connections + + + + This property will be true while this handler has + active connections, that is at least one connection that + the handler will attempt to send a message to. + + + + + + Class that represents a client connected to this handler + + + + Class that represents a client connected to this handler + + + + + + Create this for the specified + + the client's socket + + + Opens a stream writer on the socket. + + + + + + Write a string to the client + + string to send + + + Write a string to the client + + + + + + Cleanup the clients connection + + + + Close the socket connection. + + + + + + Appends log events to the system. + + + + The application configuration file can be used to control what listeners + are actually used. See the MSDN documentation for the + class for details on configuring the + trace system. + + + Events are written using the System.Diagnostics.Trace.Write(string,string) + method. The event's logger name is passed as the value for the category name to the Write method. + + + Compact Framework
+ The Compact Framework does not support the + class for any operation except Assert. When using the Compact Framework this + appender will write to the system rather than + the Trace system. This appender will therefore behave like the . +
+
+ Douglas de la Torre + Nicko Cadell + Gert Driesen +
+ + + Initializes a new instance of the . + + + + Default constructor. + + + + + + Initializes a new instance of the + with a specified layout. + + The layout to use with this appender. + + + Obsolete constructor. + + + + + + Writes the logging event to the system. + + The event to log. + + + Writes the logging event to the system. + + + + + + Immediate flush means that the underlying writer or output stream + will be flushed at the end of each append operation. + + + + Immediate flush is slower but ensures that each append request is + actually written. If is set to + false, then there is a good chance that the last few + logs events are not actually written to persistent media if and + when the application crashes. + + + The default value is true. + + + + + Gets or sets a value that indicates whether the appender will + flush at the end of each write. + + + The default behavior is to flush at the end of each + write. If the option is set tofalse, then the underlying + stream can defer writing to physical medium to a later time. + + + Avoiding the flush operation at the end of each append results + in a performance gain of 10 to 20 percent. However, there is safety + trade-off involved in skipping flushing. Indeed, when flushing is + skipped, then it is likely that the last few log events will not + be recorded on disk when the application exits. This is a high + price to pay even for a 20% performance gain. + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Assembly level attribute that specifies a domain to alias to this assembly's repository. + + + + AliasDomainAttribute is obsolete. Use AliasRepositoryAttribute instead of AliasDomainAttribute. + + + An assembly's logger repository is defined by its , + however this can be overridden by an assembly loaded before the target assembly. + + + An assembly can alias another assembly's domain to its repository by + specifying this attribute with the name of the target domain. + + + This attribute can only be specified on the assembly and may be used + as many times as necessary to alias all the required domains. + + + Nicko Cadell + Gert Driesen + + + + Assembly level attribute that specifies a repository to alias to this assembly's repository. + + + + An assembly's logger repository is defined by its , + however this can be overridden by an assembly loaded before the target assembly. + + + An assembly can alias another assembly's repository to its repository by + specifying this attribute with the name of the target repository. + + + This attribute can only be specified on the assembly and may be used + as many times as necessary to alias all the required repositories. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class with + the specified repository to alias to this assembly's repository. + + The repository to alias to this assemby's repository. + + + Initializes a new instance of the class with + the specified repository to alias to this assembly's repository. + + + + + + Gets or sets the repository to alias to this assemby's repository. + + + The repository to alias to this assemby's repository. + + + + The name of the repository to alias to this assemby's repository. + + + + + + Initializes a new instance of the class with + the specified domain to alias to this assembly's repository. + + The domain to alias to this assemby's repository. + + + Obsolete. Use instead of . + + + + + + Use this class to quickly configure a . + + + + Allows very simple programmatic configuration of log4net. + + + Only one appender can be configured using this configurator. + The appender is set at the root of the hierarchy and all logging + events will be delivered to that appender. + + + Appenders can also implement the interface. Therefore + they would require that the method + be called after the appenders properties have been configured. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to prevent instantiation of this class. + + + + + + Initializes the log4net system with a default configuration. + + + + Initializes the log4net logging system using a + that will write to Console.Out. The log messages are + formatted using the layout object + with the + layout style. + + + + + + Initializes the log4net system using the specified appender. + + The appender to use to log all logging events. + + + Initializes the log4net system using the specified appender. + + + + + + Initializes the with a default configuration. + + The repository to configure. + + + Initializes the specified repository using a + that will write to Console.Out. The log messages are + formatted using the layout object + with the + layout style. + + + + + + Initializes the using the specified appender. + + The repository to configure. + The appender to use to log all logging events. + + + Initializes the using the specified appender. + + + + + + Base class for all log4net configuration attributes. + + + This is an abstract class that must be extended by + specific configurators. This attribute allows the + configurator to be parameterized by an assembly level + attribute. + + Nicko Cadell + Gert Driesen + + + + Constructor used by subclasses. + + the ordering priority for this configurator + + + The is used to order the configurator + attributes before they are invoked. Higher priority configurators are executed + before lower priority ones. + + + + + + Configures the for the specified assembly. + + The assembly that this attribute was defined on. + The repository to configure. + + + Abstract method implemented by a subclass. When this method is called + the subclass should configure the . + + + + + + Compare this instance to another ConfiguratorAttribute + + the object to compare to + see + + + Compares the priorities of the two instances. + Sorts by priority in descending order. Objects with the same priority are + randomly ordered. + + + + + + Assembly level attribute that specifies the logging domain for the assembly. + + + + DomainAttribute is obsolete. Use RepositoryAttribute instead of DomainAttribute. + + + Assemblies are mapped to logging domains. Each domain has its own + logging repository. This attribute specified on the assembly controls + the configuration of the domain. The property specifies the name + of the domain that this assembly is a part of. The + specifies the type of the repository objects to create for the domain. If + this attribute is not specified and a is not specified + then the assembly will be part of the default shared logging domain. + + + This attribute can only be specified on the assembly and may only be used + once per assembly. + + + Nicko Cadell + Gert Driesen + + + + Assembly level attribute that specifies the logging repository for the assembly. + + + + Assemblies are mapped to logging repository. This attribute specified + on the assembly controls + the configuration of the repository. The property specifies the name + of the repository that this assembly is a part of. The + specifies the type of the object + to create for the assembly. If this attribute is not specified or a + is not specified then the assembly will be part of the default shared logging repository. + + + This attribute can only be specified on the assembly and may only be used + once per assembly. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Initialize a new instance of the class + with the name of the repository. + + The name of the repository. + + + Initialize the attribute with the name for the assembly's repository. + + + + + + Gets or sets the name of the logging repository. + + + The string name to use as the name of the repository associated with this + assembly. + + + + This value does not have to be unique. Several assemblies can share the + same repository. They will share the logging configuration of the repository. + + + + + + Gets or sets the type of repository to create for this assembly. + + + The type of repository to create for this assembly. + + + + The type of the repository to create for the assembly. + The type must implement the + interface. + + + This will be the type of repository created when + the repository is created. If multiple assemblies reference the + same repository then the repository is only created once using the + of the first assembly to call into the + repository. + + + + + + Initializes a new instance of the class. + + + + Obsolete. Use RepositoryAttribute instead of DomainAttribute. + + + + + + Initialize a new instance of the class + with the name of the domain. + + The name of the domain. + + + Obsolete. Use RepositoryAttribute instead of DomainAttribute. + + + + + + Use this class to initialize the log4net environment using an Xml tree. + + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + Configures a using an Xml tree. + + + Nicko Cadell + Gert Driesen + + + + Private constructor + + + + + Automatically configures the log4net system based on the + application's configuration settings. + + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + Each application has a configuration file. This has the + same name as the application with '.config' appended. + This file is XML and calling this function prompts the + configurator to look in that file for a section called + log4net that contains the configuration data. + + + + + Automatically configures the using settings + stored in the application's configuration file. + + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + Each application has a configuration file. This has the + same name as the application with '.config' appended. + This file is XML and calling this function prompts the + configurator to look in that file for a section called + log4net that contains the configuration data. + + The repository to configure. + + + + Configures log4net using a log4net element + + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + Loads the log4net configuration from the XML element + supplied as . + + The element to parse. + + + + Configures the using the specified XML + element. + + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + Loads the log4net configuration from the XML element + supplied as . + + The repository to configure. + The element to parse. + + + + Configures log4net using the specified configuration file. + + The XML file to load the configuration from. + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the log4net configuration data. + + + The log4net configuration file can possible be specified in the application's + configuration file (either MyAppName.exe.config for a + normal application on Web.config for an ASP.NET application). + + + The following example configures log4net using a configuration file, of which the + location is stored in the application's configuration file : + + + using log4net.Config; + using System.IO; + using System.Configuration; + + ... + + DOMConfigurator.Configure(new FileInfo(ConfigurationSettings.AppSettings["log4net-config-file"])); + + + In the .config file, the path to the log4net can be specified like this : + + + + + + + + + + + + + Configures log4net using the specified configuration file. + + A stream to load the XML configuration from. + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + The configuration data must be valid XML. It must contain + at least one element called log4net that holds + the log4net configuration data. + + + Note that this method will NOT close the stream parameter. + + + + + + Configures the using the specified configuration + file. + + The repository to configure. + The XML file to load the configuration from. + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The log4net configuration file can possible be specified in the application's + configuration file (either MyAppName.exe.config for a + normal application on Web.config for an ASP.NET application). + + + The following example configures log4net using a configuration file, of which the + location is stored in the application's configuration file : + + + using log4net.Config; + using System.IO; + using System.Configuration; + + ... + + DOMConfigurator.Configure(new FileInfo(ConfigurationSettings.AppSettings["log4net-config-file"])); + + + In the .config file, the path to the log4net can be specified like this : + + + + + + + + + + + + + Configures the using the specified configuration + file. + + The repository to configure. + The stream to load the XML configuration from. + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + The configuration data must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + Note that this method will NOT close the stream parameter. + + + + + + Configures log4net using the file specified, monitors the file for changes + and reloads the configuration if a change is detected. + + The XML file to load the configuration from. + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The configuration file will be monitored using a + and depends on the behavior of that class. + + + For more information on how to configure log4net using + a separate configuration file, see . + + + + + + + Configures the using the file specified, + monitors the file for changes and reloads the configuration if a change + is detected. + + The repository to configure. + The XML file to load the configuration from. + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The configuration file will be monitored using a + and depends on the behavior of that class. + + + For more information on how to configure log4net using + a separate configuration file, see . + + + + + + + Assembly level attribute to configure the . + + + + AliasDomainAttribute is obsolete. Use AliasRepositoryAttribute instead of AliasDomainAttribute. + + + This attribute may only be used at the assembly scope and can only + be used once per assembly. + + + Use this attribute to configure the + without calling one of the + methods. + + + Nicko Cadell + Gert Driesen + + + + Assembly level attribute to configure the . + + + + This attribute may only be used at the assembly scope and can only + be used once per assembly. + + + Use this attribute to configure the + without calling one of the + methods. + + + If neither of the or + properties are set the configuration is loaded from the application's .config file. + If set the property takes priority over the + property. The property + specifies a path to a file to load the config from. The path is relative to the + application's base directory; . + The property is used as a postfix to the assembly file name. + The config file must be located in the application's base directory; . + For example in a console application setting the to + config has the same effect as not specifying the or + properties. + + + The property can be set to cause the + to watch the configuration file for changes. + + + + Log4net will only look for assembly level configuration attributes once. + When using the log4net assembly level attributes to control the configuration + of log4net you must ensure that the first call to any of the + methods is made from the assembly with the configuration + attributes. + + + If you cannot guarantee the order in which log4net calls will be made from + different assemblies you must use programmatic configuration instead, i.e. + call the method directly. + + + + Nicko Cadell + Gert Driesen + + + + Default constructor + + + + Default constructor + + + + + + Configures the for the specified assembly. + + The assembly that this attribute was defined on. + The repository to configure. + + + Configure the repository using the . + The specified must extend the + class otherwise the will not be able to + configure it. + + + The does not extend . + + + + Attempt to load configuration from the local file system + + The assembly that this attribute was defined on. + The repository to configure. + + + + Configure the specified repository using a + + The repository to configure. + the FileInfo pointing to the config file + + + + Attempt to load configuration from a URI + + The assembly that this attribute was defined on. + The repository to configure. + + + + Gets or sets the filename of the configuration file. + + + The filename of the configuration file. + + + + If specified, this is the name of the configuration file to use with + the . This file path is relative to the + application base directory (). + + + The takes priority over the . + + + + + + Gets or sets the extension of the configuration file. + + + The extension of the configuration file. + + + + If specified this is the extension for the configuration file. + The path to the config file is built by using the application + base directory (), + the assembly file name and the config file extension. + + + If the is set to MyExt then + possible config file names would be: MyConsoleApp.exe.MyExt or + MyClassLibrary.dll.MyExt. + + + The takes priority over the . + + + + + + Gets or sets a value indicating whether to watch the configuration file. + + + true if the configuration should be watched, false otherwise. + + + + If this flag is specified and set to true then the framework + will watch the configuration file and will reload the config each time + the file is modified. + + + The config file can only be watched if it is loaded from local disk. + In a No-Touch (Smart Client) deployment where the application is downloaded + from a web server the config file may not reside on the local disk + and therefore it may not be able to watch it. + + + Watching configuration is not supported on the SSCLI. + + + + + + Class to register for the log4net section of the configuration file + + + The log4net section of the configuration file needs to have a section + handler registered. This is the section handler used. It simply returns + the XML element that is the root of the section. + + + Example of registering the log4net section handler : + + + +
+ + + log4net configuration XML goes here + + + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Parses the configuration section. + + The configuration settings in a corresponding parent configuration section. + The configuration context when called from the ASP.NET configuration system. Otherwise, this parameter is reserved and is a null reference. + The for the log4net section. + The for the log4net section. + + + Returns the containing the configuration data, + + + + + + Assembly level attribute that specifies a plugin to attach to + the repository. + + + + Specifies the type of a plugin to create and attach to the + assembly's repository. The plugin type must implement the + interface. + + + Nicko Cadell + Gert Driesen + + + + Interface used to create plugins. + + + + Interface used to create a plugin. + + + Nicko Cadell + Gert Driesen + + + + Creates the plugin object. + + the new plugin instance + + + Create and return a new plugin instance. + + + + + + Initializes a new instance of the class + with the specified type. + + The type name of plugin to create. + + + Create the attribute with the plugin type specified. + + + Where possible use the constructor that takes a . + + + + + + Initializes a new instance of the class + with the specified type. + + The type of plugin to create. + + + Create the attribute with the plugin type specified. + + + + + + Creates the plugin object defined by this attribute. + + + + Creates the instance of the object as + specified by this attribute. + + + The plugin object. + + + + Returns a representation of the properties of this object. + + + + Overrides base class method to + return a representation of the properties of this object. + + + A representation of the properties of this object + + + + Gets or sets the type for the plugin. + + + The type for the plugin. + + + + The type for the plugin. + + + + + + Gets or sets the type name for the plugin. + + + The type name for the plugin. + + + + The type name for the plugin. + + + Where possible use the property instead. + + + + + + Assembly level attribute to configure the . + + + + This attribute may only be used at the assembly scope and can only + be used once per assembly. + + + Use this attribute to configure the + without calling one of the + methods. + + + Nicko Cadell + + + + Construct provider attribute with type specified + + the type of the provider to use + + + The provider specified must subclass the + class. + + + + + + Configures the SecurityContextProvider + + The assembly that this attribute was defined on. + The repository to configure. + + + Creates a provider instance from the specified. + Sets this as the default security context provider . + + + + + + Gets or sets the type of the provider to use. + + + the type of the provider to use. + + + + The provider specified must subclass the + class. + + + + + + Use this class to initialize the log4net environment using an Xml tree. + + + + Configures a using an Xml tree. + + + Nicko Cadell + Gert Driesen + + + + Private constructor + + + + + Automatically configures the log4net system based on the + application's configuration settings. + + + + Each application has a configuration file. This has the + same name as the application with '.config' appended. + This file is XML and calling this function prompts the + configurator to look in that file for a section called + log4net that contains the configuration data. + + + To use this method to configure log4net you must specify + the section + handler for the log4net configuration section. See the + for an example. + + + + + + + Automatically configures the using settings + stored in the application's configuration file. + + + + Each application has a configuration file. This has the + same name as the application with '.config' appended. + This file is XML and calling this function prompts the + configurator to look in that file for a section called + log4net that contains the configuration data. + + + To use this method to configure log4net you must specify + the section + handler for the log4net configuration section. See the + for an example. + + + The repository to configure. + + + + Configures log4net using a log4net element + + + + Loads the log4net configuration from the XML element + supplied as . + + + The element to parse. + + + + Configures the using the specified XML + element. + + + Loads the log4net configuration from the XML element + supplied as . + + The repository to configure. + The element to parse. + + + + Configures log4net using the specified configuration file. + + The XML file to load the configuration from. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the log4net configuration data. + + + The log4net configuration file can possible be specified in the application's + configuration file (either MyAppName.exe.config for a + normal application on Web.config for an ASP.NET application). + + + The first element matching <configuration> will be read as the + configuration. If this file is also a .NET .config file then you must specify + a configuration section for the log4net element otherwise .NET will + complain. Set the type for the section handler to , for example: + + +
+ + + + + The following example configures log4net using a configuration file, of which the + location is stored in the application's configuration file : + + + using log4net.Config; + using System.IO; + using System.Configuration; + + ... + + XmlConfigurator.Configure(new FileInfo(ConfigurationSettings.AppSettings["log4net-config-file"])); + + + In the .config file, the path to the log4net can be specified like this : + + + + + + + + + + + + + Configures log4net using the specified configuration URI. + + A URI to load the XML configuration from. + + + The configuration data must be valid XML. It must contain + at least one element called log4net that holds + the log4net configuration data. + + + The must support the URI scheme specified. + + + + + + Configures log4net using the specified configuration data stream. + + A stream to load the XML configuration from. + + + The configuration data must be valid XML. It must contain + at least one element called log4net that holds + the log4net configuration data. + + + Note that this method will NOT close the stream parameter. + + + + + + Configures the using the specified configuration + file. + + The repository to configure. + The XML file to load the configuration from. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The log4net configuration file can possible be specified in the application's + configuration file (either MyAppName.exe.config for a + normal application on Web.config for an ASP.NET application). + + + The first element matching <configuration> will be read as the + configuration. If this file is also a .NET .config file then you must specify + a configuration section for the log4net element otherwise .NET will + complain. Set the type for the section handler to , for example: + + +
+ + + + + The following example configures log4net using a configuration file, of which the + location is stored in the application's configuration file : + + + using log4net.Config; + using System.IO; + using System.Configuration; + + ... + + XmlConfigurator.Configure(new FileInfo(ConfigurationSettings.AppSettings["log4net-config-file"])); + + + In the .config file, the path to the log4net can be specified like this : + + + + + + + + + + + + + Configures the using the specified configuration + URI. + + The repository to configure. + A URI to load the XML configuration from. + + + The configuration data must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The must support the URI scheme specified. + + + + + + Configures the using the specified configuration + file. + + The repository to configure. + The stream to load the XML configuration from. + + + The configuration data must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + Note that this method will NOT close the stream parameter. + + + + + + Configures log4net using the file specified, monitors the file for changes + and reloads the configuration if a change is detected. + + The XML file to load the configuration from. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The configuration file will be monitored using a + and depends on the behavior of that class. + + + For more information on how to configure log4net using + a separate configuration file, see . + + + + + + + Configures the using the file specified, + monitors the file for changes and reloads the configuration if a change + is detected. + + The repository to configure. + The XML file to load the configuration from. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The configuration file will be monitored using a + and depends on the behavior of that class. + + + For more information on how to configure log4net using + a separate configuration file, see . + + + + + + + Configures the specified repository using a log4net element. + + The hierarchy to configure. + The element to parse. + + + Loads the log4net configuration from the XML element + supplied as . + + + This method is ultimately called by one of the Configure methods + to load the configuration from an . + + + + + + Class used to watch config files. + + + + Uses the to monitor + changes to a specified file. Because multiple change notifications + may be raised when the file is modified, a timer is used to + compress the notifications into a single event. The timer + waits for time before delivering + the event notification. If any further + change notifications arrive while the timer is waiting it + is reset and waits again for to + elapse. + + + + + + The default amount of time to wait after receiving notification + before reloading the config file. + + + + + Watch a specified config file used to configure a repository + + The repository to configure. + The configuration file to watch. + + + Watch a specified config file used to configure a repository + + + + + + Holds the FileInfo used to configure the XmlConfigurator + + + + + Holds the repository being configured. + + + + + The timer used to compress the notification events. + + + + + Initializes a new instance of the class. + + The repository to configure. + The configuration file to watch. + + + Initializes a new instance of the class. + + + + + + Event handler used by . + + The firing the event. + The argument indicates the file that caused the event to be fired. + + + This handler reloads the configuration from the file when the event is fired. + + + + + + Event handler used by . + + The firing the event. + The argument indicates the file that caused the event to be fired. + + + This handler reloads the configuration from the file when the event is fired. + + + + + + Called by the timer when the configuration has been updated. + + null + + + + The implementation of the interface suitable + for use with the compact framework + + + + This implementation is a simple + mapping between repository name and + object. + + + The .NET Compact Framework 1.0 does not support retrieving assembly + level attributes therefore unlike the DefaultRepositorySelector + this selector does not examine the calling assembly for attributes. + + + Nicko Cadell + + + + Interface used by the to select the . + + + + The uses a + to specify the policy for selecting the correct + to return to the caller. + + + Nicko Cadell + Gert Driesen + + + + Gets the for the specified assembly. + + The assembly to use to lookup to the + The for the assembly. + + + Gets the for the specified assembly. + + + How the association between and + is made is not defined. The implementation may choose any method for + this association. The results of this method must be repeatable, i.e. + when called again with the same arguments the result must be the + save value. + + + + + + Gets the named . + + The name to use to lookup to the . + The named + + Lookup a named . This is the repository created by + calling . + + + + + Creates a new repository for the assembly specified. + + The assembly to use to create the domain to associate with the . + The type of repository to create, must implement . + The repository created. + + + The created will be associated with the domain + specified such that a call to with the + same assembly specified will return the same repository instance. + + + How the association between and + is made is not defined. The implementation may choose any method for + this association. + + + + + + Creates a new repository with the name specified. + + The name to associate with the . + The type of repository to create, must implement . + The repository created. + + + The created will be associated with the name + specified such that a call to with the + same name will return the same repository instance. + + + + + + Test if a named repository exists + + the named repository to check + true if the repository exists + + + Test if a named repository exists. Use + to create a new repository and to retrieve + a repository. + + + + + + Gets an array of all currently defined repositories. + + + An array of the instances created by + this . + + + Gets an array of all of the repositories created by this selector. + + + + + + Event to notify that a logger repository has been created. + + + Event to notify that a logger repository has been created. + + + + Event raised when a new repository is created. + The event source will be this selector. The event args will + be a which + holds the newly created . + + + + + + Create a new repository selector + + the type of the repositories to create, must implement + + + Create an new compact repository selector. + The default type for repositories must be specified, + an appropriate value would be . + + + throw if is null + throw if does not implement + + + + Get the for the specified assembly + + not used + The default + + + The argument is not used. This selector does not create a + separate repository for each assembly. + + + As a named repository is not specified the default repository is + returned. The default repository is named log4net-default-repository. + + + + + + Get the named + + the name of the repository to lookup + The named + + + Get the named . The default + repository is log4net-default-repository. Other repositories + must be created using the . + If the named repository does not exist an exception is thrown. + + + throw if is null + throw if the does not exist + + + + Create a new repository for the assembly specified + + not used + the type of repository to create, must implement + the repository created + + + The argument is not used. This selector does not create a + separate repository for each assembly. + + + If the is null then the + default repository type specified to the constructor is used. + + + As a named repository is not specified the default repository is + returned. The default repository is named log4net-default-repository. + + + + + + Create a new repository for the repository specified + + the repository to associate with the + the type of repository to create, must implement . + If this param is null then the default repository type is used. + the repository created + + + The created will be associated with the repository + specified such that a call to with the + same repository specified will return the same repository instance. + + + If the named repository already exists an exception will be thrown. + + + If is null then the default + repository type specified to the constructor is used. + + + throw if is null + throw if the already exists + + + + Test if a named repository exists + + the named repository to check + true if the repository exists + + + Test if a named repository exists. Use + to create a new repository and to retrieve + a repository. + + + + + + Gets a list of objects + + an array of all known objects + + + Gets an array of all of the repositories created by this selector. + + + + + + Notify the registered listeners that the repository has been created + + The repository that has been created + + + Raises the LoggerRepositoryCreatedEvent + event. + + + + + + Event to notify that a logger repository has been created. + + + Event to notify that a logger repository has been created. + + + + Event raised when a new repository is created. + The event source will be this selector. The event args will + be a which + holds the newly created . + + + + + + The default implementation of the interface. + + + + Uses attributes defined on the calling assembly to determine how to + configure the hierarchy for the repository. + + + Nicko Cadell + Gert Driesen + + + + Creates a new repository selector. + + The type of the repositories to create, must implement + + + Create an new repository selector. + The default type for repositories must be specified, + an appropriate value would be . + + + is . + does not implement . + + + + Gets the for the specified assembly. + + The assembly use to lookup the . + + + The type of the created and the repository + to create can be overridden by specifying the + attribute on the . + + + The default values are to use the + implementation of the interface and to use the + as the name of the repository. + + + The created will be automatically configured using + any attributes defined on + the . + + + The for the assembly + is . + + + + Gets the for the specified repository. + + The repository to use to lookup the . + The for the specified repository. + + + Returns the named repository. If is null + a is thrown. If the repository + does not exist a is thrown. + + + Use to create a repository. + + + is . + does not exist. + + + + Create a new repository for the assembly specified + + the assembly to use to create the repository to associate with the . + The type of repository to create, must implement . + The repository created. + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + The type of the created and + the repository to create can be overridden by specifying the + attribute on the + . The default values are to use the + implementation of the + interface and to use the + as the name of the repository. + + + The created will be automatically + configured using any + attributes defined on the . + + + If a repository for the already exists + that repository will be returned. An error will not be raised and that + repository may be of a different type to that specified in . + Also the attribute on the + assembly may be used to override the repository type specified in + . + + + is . + + + + Creates a new repository for the assembly specified. + + the assembly to use to create the repository to associate with the . + The type of repository to create, must implement . + The name to assign to the created repository + Set to true to read and apply the assembly attributes + The repository created. + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + The type of the created and + the repository to create can be overridden by specifying the + attribute on the + . The default values are to use the + implementation of the + interface and to use the + as the name of the repository. + + + The created will be automatically + configured using any + attributes defined on the . + + + If a repository for the already exists + that repository will be returned. An error will not be raised and that + repository may be of a different type to that specified in . + Also the attribute on the + assembly may be used to override the repository type specified in + . + + + is . + + + + Creates a new repository for the specified repository. + + The repository to associate with the . + The type of repository to create, must implement . + If this param is then the default repository type is used. + The new repository. + + + The created will be associated with the repository + specified such that a call to with the + same repository specified will return the same repository instance. + + + is . + already exists. + + + + Test if a named repository exists + + the named repository to check + true if the repository exists + + + Test if a named repository exists. Use + to create a new repository and to retrieve + a repository. + + + + + + Gets a list of objects + + an array of all known objects + + + Gets an array of all of the repositories created by this selector. + + + + + + Aliases a repository to an existing repository. + + The repository to alias. + The repository that the repository is aliased to. + + + The repository specified will be aliased to the repository when created. + The repository must not already exist. + + + When the repository is created it must utilize the same repository type as + the repository it is aliased to, otherwise the aliasing will fail. + + + + is . + -or- + is . + + + + + Notifies the registered listeners that the repository has been created. + + The repository that has been created. + + + Raises the event. + + + + + + Gets the repository name and repository type for the specified assembly. + + The assembly that has a . + in/out param to hold the repository name to use for the assembly, caller should set this to the default value before calling. + in/out param to hold the type of the repository to create for the assembly, caller should set this to the default value before calling. + is . + + + + Configures the repository using information from the assembly. + + The assembly containing + attributes which define the configuration for the repository. + The repository to configure. + + is . + -or- + is . + + + + + Loads the attribute defined plugins on the assembly. + + The assembly that contains the attributes. + The repository to add the plugins to. + + is . + -or- + is . + + + + + Loads the attribute defined aliases on the assembly. + + The assembly that contains the attributes. + The repository to alias to. + + is . + -or- + is . + + + + + Event to notify that a logger repository has been created. + + + Event to notify that a logger repository has been created. + + + + Event raised when a new repository is created. + The event source will be this selector. The event args will + be a which + holds the newly created . + + + + + + Defined error codes that can be passed to the method. + + + + Values passed to the method. + + + Nicko Cadell + + + + A general error + + + + + Error while writing output + + + + + Failed to flush file + + + + + Failed to close file + + + + + Unable to open output file + + + + + No layout specified + + + + + Failed to parse address + + + + + Appenders may delegate their error handling to an . + + + + Error handling is a particularly tedious to get right because by + definition errors are hard to predict and to reproduce. + + + Nicko Cadell + Gert Driesen + + + + Handles the error and information about the error condition is passed as + a parameter. + + The message associated with the error. + The that was thrown when the error occurred. + The error code associated with the error. + + + Handles the error and information about the error condition is passed as + a parameter. + + + + + + Prints the error message passed as a parameter. + + The message associated with the error. + The that was thrown when the error occurred. + + + See . + + + + + + Prints the error message passed as a parameter. + + The message associated with the error. + + + See . + + + + + + Interface for objects that require fixing. + + + + Interface that indicates that the object requires fixing before it + can be taken outside the context of the appender's + method. + + + When objects that implement this interface are stored + in the context properties maps + and + are fixed + (see ) the + method will be called. + + + Nicko Cadell + + + + Get a portable version of this object + + the portable instance of this object + + + Get a portable instance object that represents the current + state of this object. The portable object can be stored + and logged from any thread with identical results. + + + + + + Interface that all loggers implement + + + + This interface supports logging events and testing if a level + is enabled for logging. + + + These methods will not throw exceptions. Note to implementor, ensure + that the implementation of these methods cannot allow an exception + to be thrown to the caller. + + + Nicko Cadell + Gert Driesen + + + + This generic form is intended to be used by wrappers. + + The declaring type of the method that is + the stack boundary into the logging system for this call. + The level of the message to be logged. + The message object to log. + the exception to log, including its stack trace. Pass null to not log an exception. + + + Generates a logging event for the specified using + the and . + + + + + + This is the most generic printing method that is intended to be used + by wrappers. + + The event being logged. + + + Logs the specified logging event through this logger. + + + + + + Checks if this logger is enabled for a given passed as parameter. + + The level to check. + + true if this logger is enabled for level, otherwise false. + + + + Test if this logger is going to log events of the specified . + + + + + + Gets the name of the logger. + + + The name of the logger. + + + + The name of this logger + + + + + + Gets the where this + Logger instance is attached to. + + + The that this logger belongs to. + + + + Gets the where this + Logger instance is attached to. + + + + + + Base interface for all wrappers + + + + Base interface for all wrappers. + + + All wrappers must implement this interface. + + + Nicko Cadell + + + + Get the implementation behind this wrapper object. + + + The object that in implementing this object. + + + + The object that in implementing this + object. The Logger object may not + be the same object as this object because of logger decorators. + This gets the actual underlying objects that is used to process + the log events. + + + + + + Delegate used to handle logger repository creation event notifications + + The which created the repository. + The event args + that holds the instance that has been created. + + + Delegate used to handle logger repository creation event notifications. + + + + + + Provides data for the event. + + + + A + event is raised every time a is created. + + + + + + The created + + + + + Construct instance using specified + + the that has been created + + + Construct instance using specified + + + + + + The that has been created + + + The that has been created + + + + The that has been created + + + + + + Test if an triggers an action + + + + Implementations of this interface allow certain appenders to decide + when to perform an appender specific action. + + + The action or behavior triggered is defined by the implementation. + + + Nicko Cadell + + + + Test if this event triggers the action + + The event to check + true if this event triggers the action, otherwise false + + + Return true if this event triggers the action + + + + + + Defines the default set of levels recognized by the system. + + + + Each has an associated . + + + Levels have a numeric that defines the relative + ordering between levels. Two Levels with the same + are deemed to be equivalent. + + + The levels that are recognized by log4net are set for each + and each repository can have different levels defined. The levels are stored + in the on the repository. Levels are + looked up by name from the . + + + When logging at level INFO the actual level used is not but + the value of LoggerRepository.LevelMap["INFO"]. The default value for this is + , but this can be changed by reconfiguring the level map. + + + Each level has a in addition to its . The + is the string that is written into the output log. By default + the display name is the same as the level name, but this can be used to alias levels + or to localize the log output. + + + Some of the predefined levels recognized by the system are: + + + + . + + + . + + + . + + + . + + + . + + + . + + + . + + + + Nicko Cadell + Gert Driesen + + + + Constructor + + Integer value for this level, higher values represent more severe levels. + The string name of this level. + The display name for this level. This may be localized or otherwise different from the name + + + Initializes a new instance of the class with + the specified level name and value. + + + + + + Constructor + + Integer value for this level, higher values represent more severe levels. + The string name of this level. + + + Initializes a new instance of the class with + the specified level name and value. + + + + + + Returns the representation of the current + . + + + A representation of the current . + + + + Returns the level . + + + + + + Compares levels. + + The object to compare against. + true if the objects are equal. + + + Compares the levels of instances, and + defers to base class if the target object is not a + instance. + + + + + + Returns a hash code + + A hash code for the current . + + + Returns a hash code suitable for use in hashing algorithms and data + structures like a hash table. + + + Returns the hash code of the level . + + + + + + Compares this instance to a specified object and returns an + indication of their relative values. + + A instance or to compare with this instance. + + A 32-bit signed integer that indicates the relative order of the + values compared. The return value has these meanings: + + + Value + Meaning + + + Less than zero + This instance is less than . + + + Zero + This instance is equal to . + + + Greater than zero + + This instance is greater than . + -or- + is . + + + + + + + must be an instance of + or ; otherwise, an exception is thrown. + + + is not a . + + + + Returns a value indicating whether a specified + is greater than another specified . + + A + A + + true if is greater than + ; otherwise, false. + + + + Compares two levels. + + + + + + Returns a value indicating whether a specified + is less than another specified . + + A + A + + true if is less than + ; otherwise, false. + + + + Compares two levels. + + + + + + Returns a value indicating whether a specified + is greater than or equal to another specified . + + A + A + + true if is greater than or equal to + ; otherwise, false. + + + + Compares two levels. + + + + + + Returns a value indicating whether a specified + is less than or equal to another specified . + + A + A + + true if is less than or equal to + ; otherwise, false. + + + + Compares two levels. + + + + + + Returns a value indicating whether two specified + objects have the same value. + + A or . + A or . + + true if the value of is the same as the + value of ; otherwise, false. + + + + Compares two levels. + + + + + + Returns a value indicating whether two specified + objects have different values. + + A or . + A or . + + true if the value of is different from + the value of ; otherwise, false. + + + + Compares two levels. + + + + + + Compares two specified instances. + + The first to compare. + The second to compare. + + A 32-bit signed integer that indicates the relative order of the + two values compared. The return value has these meanings: + + + Value + Meaning + + + Less than zero + is less than . + + + Zero + is equal to . + + + Greater than zero + is greater than . + + + + + + Compares two levels. + + + + + + The level designates a higher level than all the rest. + + + + + The level designates very severe error events. + System unusable, emergencies. + + + + + The level designates very severe error events + that will presumably lead the application to abort. + + + + + The level designates very severe error events. + Take immediate action, alerts. + + + + + The level designates very severe error events. + Critical condition, critical. + + + + + The level designates very severe error events. + + + + + The level designates error events that might + still allow the application to continue running. + + + + + The level designates potentially harmful + situations. + + + + + The level designates informational messages + that highlight the progress of the application at the highest level. + + + + + The level designates informational messages that + highlight the progress of the application at coarse-grained level. + + + + + The level designates fine-grained informational + events that are most useful to debug an application. + + + + + The level designates fine-grained informational + events that are most useful to debug an application. + + + + + The level designates fine-grained informational + events that are most useful to debug an application. + + + + + The level designates fine-grained informational + events that are most useful to debug an application. + + + + + The level designates fine-grained informational + events that are most useful to debug an application. + + + + + The level designates fine-grained informational + events that are most useful to debug an application. + + + + + The level designates the lowest level possible. + + + + + Gets the name of this level. + + + The name of this level. + + + + Gets the name of this level. + + + + + + Gets the value of this level. + + + The value of this level. + + + + Gets the value of this level. + + + + + + Gets the display name of this level. + + + The display name of this level. + + + + Gets the display name of this level. + + + + + + A strongly-typed collection of objects. + + Nicko Cadell + + + + Creates a read-only wrapper for a LevelCollection instance. + + list to create a readonly wrapper arround + + A LevelCollection wrapper that is read-only. + + + + + Initializes a new instance of the LevelCollection class + that is empty and has the default initial capacity. + + + + + Initializes a new instance of the LevelCollection class + that has the specified initial capacity. + + + The number of elements that the new LevelCollection is initially capable of storing. + + + + + Initializes a new instance of the LevelCollection class + that contains elements copied from the specified LevelCollection. + + The LevelCollection whose elements are copied to the new collection. + + + + Initializes a new instance of the LevelCollection class + that contains elements copied from the specified array. + + The array whose elements are copied to the new list. + + + + Initializes a new instance of the LevelCollection class + that contains elements copied from the specified collection. + + The collection whose elements are copied to the new list. + + + + Allow subclasses to avoid our default constructors + + + + + + Copies the entire LevelCollection to a one-dimensional + array. + + The one-dimensional array to copy to. + + + + Copies the entire LevelCollection to a one-dimensional + array, starting at the specified index of the target array. + + The one-dimensional array to copy to. + The zero-based index in at which copying begins. + + + + Adds a to the end of the LevelCollection. + + The to be added to the end of the LevelCollection. + The index at which the value has been added. + + + + Removes all elements from the LevelCollection. + + + + + Creates a shallow copy of the . + + A new with a shallow copy of the collection data. + + + + Determines whether a given is in the LevelCollection. + + The to check for. + true if is found in the LevelCollection; otherwise, false. + + + + Returns the zero-based index of the first occurrence of a + in the LevelCollection. + + The to locate in the LevelCollection. + + The zero-based index of the first occurrence of + in the entire LevelCollection, if found; otherwise, -1. + + + + + Inserts an element into the LevelCollection at the specified index. + + The zero-based index at which should be inserted. + The to insert. + + is less than zero + -or- + is equal to or greater than . + + + + + Removes the first occurrence of a specific from the LevelCollection. + + The to remove from the LevelCollection. + + The specified was not found in the LevelCollection. + + + + + Removes the element at the specified index of the LevelCollection. + + The zero-based index of the element to remove. + + is less than zero + -or- + is equal to or greater than . + + + + + Returns an enumerator that can iterate through the LevelCollection. + + An for the entire LevelCollection. + + + + Adds the elements of another LevelCollection to the current LevelCollection. + + The LevelCollection whose elements should be added to the end of the current LevelCollection. + The new of the LevelCollection. + + + + Adds the elements of a array to the current LevelCollection. + + The array whose elements should be added to the end of the LevelCollection. + The new of the LevelCollection. + + + + Adds the elements of a collection to the current LevelCollection. + + The collection whose elements should be added to the end of the LevelCollection. + The new of the LevelCollection. + + + + Sets the capacity to the actual number of elements. + + + + + is less than zero + -or- + is equal to or greater than . + + + + + is less than zero + -or- + is equal to or greater than . + + + + + Gets the number of elements actually contained in the LevelCollection. + + + + + Gets a value indicating whether access to the collection is synchronized (thread-safe). + + true if access to the ICollection is synchronized (thread-safe); otherwise, false. + + + + Gets an object that can be used to synchronize access to the collection. + + + + + Gets or sets the at the specified index. + + The zero-based index of the element to get or set. + + is less than zero + -or- + is equal to or greater than . + + + + + Gets a value indicating whether the collection has a fixed size. + + true if the collection has a fixed size; otherwise, false. The default is false + + + + Gets a value indicating whether the IList is read-only. + + true if the collection is read-only; otherwise, false. The default is false + + + + Gets or sets the number of elements the LevelCollection can contain. + + + + + Supports type-safe iteration over a . + + + + + Advances the enumerator to the next element in the collection. + + + true if the enumerator was successfully advanced to the next element; + false if the enumerator has passed the end of the collection. + + + The collection was modified after the enumerator was created. + + + + + Sets the enumerator to its initial position, before the first element in the collection. + + + + + Gets the current element in the collection. + + + + + Type visible only to our subclasses + Used to access protected constructor + + + + + A value + + + + + Supports simple iteration over a . + + + + + Initializes a new instance of the Enumerator class. + + + + + + Advances the enumerator to the next element in the collection. + + + true if the enumerator was successfully advanced to the next element; + false if the enumerator has passed the end of the collection. + + + The collection was modified after the enumerator was created. + + + + + Sets the enumerator to its initial position, before the first element in the collection. + + + + + Gets the current element in the collection. + + + + + An evaluator that triggers at a threshold level + + + + This evaluator will trigger if the level of the event + passed to + is equal to or greater than the + level. + + + Nicko Cadell + + + + The threshold for triggering + + + + + Create a new evaluator using the threshold. + + + + Create a new evaluator using the threshold. + + + This evaluator will trigger if the level of the event + passed to + is equal to or greater than the + level. + + + + + + Create a new evaluator using the specified threshold. + + the threshold to trigger at + + + Create a new evaluator using the specified threshold. + + + This evaluator will trigger if the level of the event + passed to + is equal to or greater than the + level. + + + + + + Is this the triggering event? + + The event to check + This method returns true, if the event level + is equal or higher than the . + Otherwise it returns false + + + This evaluator will trigger if the level of the event + passed to + is equal to or greater than the + level. + + + + + + the threshold to trigger at + + + The that will cause this evaluator to trigger + + + + This evaluator will trigger if the level of the event + passed to + is equal to or greater than the + level. + + + + + + Mapping between string name and Level object + + + + Mapping between string name and object. + This mapping is held separately for each . + The level name is case insensitive. + + + Nicko Cadell + + + + Mapping from level name to Level object. The + level name is case insensitive + + + + + Construct the level map + + + + Construct the level map. + + + + + + Clear the internal maps of all levels + + + + Clear the internal maps of all levels + + + + + + Create a new Level and add it to the map + + the string to display for the Level + the level value to give to the Level + + + Create a new Level and add it to the map + + + + + + + Create a new Level and add it to the map + + the string to display for the Level + the level value to give to the Level + the display name to give to the Level + + + Create a new Level and add it to the map + + + + + + Add a Level to the map + + the Level to add + + + Add a Level to the map + + + + + + Lookup a named level from the map + + the name of the level to lookup is taken from this level. + If the level is not set on the map then this level is added + the level in the map with the name specified + + + Lookup a named level from the map. The name of the level to lookup is taken + from the property of the + argument. + + + If no level with the specified name is found then the + argument is added to the level map + and returned. + + + + + + Lookup a by name + + The name of the Level to lookup + a Level from the map with the name specified + + + Returns the from the + map with the name specified. If the no level is + found then null is returned. + + + + + + Return all possible levels as a list of Level objects. + + all possible levels as a list of Level objects + + + Return all possible levels as a list of Level objects. + + + + + + The internal representation of caller location information. + + + + This class uses the System.Diagnostics.StackTrace class to generate + a call stack. The caller's information is then extracted from this stack. + + + The System.Diagnostics.StackTrace class is not supported on the + .NET Compact Framework 1.0 therefore caller location information is not + available on that framework. + + + The System.Diagnostics.StackTrace class has this to say about Release builds: + + + "StackTrace information will be most informative with Debug build configurations. + By default, Debug builds include debug symbols, while Release builds do not. The + debug symbols contain most of the file, method name, line number, and column + information used in constructing StackFrame and StackTrace objects. StackTrace + might not report as many method calls as expected, due to code transformations + that occur during optimization." + + + This means that in a Release build the caller information may be incomplete or may + not exist at all! Therefore caller location information cannot be relied upon in a Release build. + + + Nicko Cadell + Gert Driesen + + + + When location information is not available the constant + NA is returned. Current value of this string + constant is ?. + + + + + Constructor + + The declaring type of the method that is + the stack boundary into the logging system for this call. + + + Initializes a new instance of the + class based on the current thread. + + + + + + Constructor + + The fully qualified class name. + The method name. + The file name. + The line number of the method within the file. + + + Initializes a new instance of the + class with the specified data. + + + + + + Gets the fully qualified class name of the caller making the logging + request. + + + The fully qualified class name of the caller making the logging + request. + + + + Gets the fully qualified class name of the caller making the logging + request. + + + + + + Gets the file name of the caller. + + + The file name of the caller. + + + + Gets the file name of the caller. + + + + + + Gets the line number of the caller. + + + The line number of the caller. + + + + Gets the line number of the caller. + + + + + + Gets the method name of the caller. + + + The method name of the caller. + + + + Gets the method name of the caller. + + + + + + Gets all available caller information + + + All available caller information, in the format + fully.qualified.classname.of.caller.methodName(Filename:line) + + + + Gets all available caller information, in the format + fully.qualified.classname.of.caller.methodName(Filename:line) + + + + + + Static manager that controls the creation of repositories + + + + Static manager that controls the creation of repositories + + + This class is used by the wrapper managers (e.g. ) + to provide access to the objects. + + + This manager also holds the that is used to + lookup and create repositories. The selector can be set either programmatically using + the property, or by setting the log4net.RepositorySelector + AppSetting in the applications config file to the fully qualified type name of the + selector to use. + + + Nicko Cadell + Gert Driesen + + + + Private constructor to prevent instances. Only static methods should be used. + + + + Private constructor to prevent instances. Only static methods should be used. + + + + + + Hook the shutdown event + + + + On the full .NET runtime, the static constructor hooks up the + AppDomain.ProcessExit and AppDomain.DomainUnload> events. + These are used to shutdown the log4net system as the application exits. + + + + + + Register for ProcessExit and DomainUnload events on the AppDomain + + + + This needs to be in a separate method because the events make + a LinkDemand for the ControlAppDomain SecurityPermission. Because + this is a LinkDemand it is demanded at JIT time. Therefore we cannot + catch the exception in the method itself, we have to catch it in the + caller. + + + + + + Return the default instance. + + the repository to lookup in + Return the default instance + + + Gets the for the repository specified + by the argument. + + + + + + Returns the default instance. + + The assembly to use to lookup the repository. + The default instance. + + + + Return the default instance. + + the repository to lookup in + Return the default instance + + + Gets the for the repository specified + by the argument. + + + + + + Returns the default instance. + + The assembly to use to lookup the repository. + The default instance. + + + Returns the default instance. + + + + + + Returns the named logger if it exists. + + The repository to lookup in. + The fully qualified logger name to look for. + + The logger found, or null if the named logger does not exist in the + specified repository. + + + + If the named logger exists (in the specified repository) then it + returns a reference to the logger, otherwise it returns + null. + + + + + + Returns the named logger if it exists. + + The assembly to use to lookup the repository. + The fully qualified logger name to look for. + + The logger found, or null if the named logger does not exist in the + specified assembly's repository. + + + + If the named logger exists (in the specified assembly's repository) then it + returns a reference to the logger, otherwise it returns + null. + + + + + + Returns all the currently defined loggers in the specified repository. + + The repository to lookup in. + All the defined loggers. + + + The root logger is not included in the returned array. + + + + + + Returns all the currently defined loggers in the specified assembly's repository. + + The assembly to use to lookup the repository. + All the defined loggers. + + + The root logger is not included in the returned array. + + + + + + Retrieves or creates a named logger. + + The repository to lookup in. + The name of the logger to retrieve. + The logger with the name specified. + + + Retrieves a logger named as the + parameter. If the named logger already exists, then the + existing instance will be returned. Otherwise, a new instance is + created. + + + By default, loggers do not have a set level but inherit + it from the hierarchy. This is one of the central features of + log4net. + + + + + + Retrieves or creates a named logger. + + The assembly to use to lookup the repository. + The name of the logger to retrieve. + The logger with the name specified. + + + Retrieves a logger named as the + parameter. If the named logger already exists, then the + existing instance will be returned. Otherwise, a new instance is + created. + + + By default, loggers do not have a set level but inherit + it from the hierarchy. This is one of the central features of + log4net. + + + + + + Shorthand for . + + The repository to lookup in. + The of which the fullname will be used as the name of the logger to retrieve. + The logger with the name specified. + + + Gets the logger for the fully qualified name of the type specified. + + + + + + Shorthand for . + + the assembly to use to lookup the repository + The of which the fullname will be used as the name of the logger to retrieve. + The logger with the name specified. + + + Gets the logger for the fully qualified name of the type specified. + + + + + + Shuts down the log4net system. + + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in all the + default repositories. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + + Shuts down the repository for the repository specified. + + The repository to shutdown. + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in the + repository for the specified. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + + Shuts down the repository for the repository specified. + + The assembly to use to lookup the repository. + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in the + repository for the repository. The repository is looked up using + the specified. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + + Resets all values contained in this repository instance to their defaults. + + The repository to reset. + + + Resets all values contained in the repository instance to their + defaults. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set its default "off" value. + + + + + + Resets all values contained in this repository instance to their defaults. + + The assembly to use to lookup the repository to reset. + + + Resets all values contained in the repository instance to their + defaults. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set its default "off" value. + + + + + + Creates a repository with the specified name. + + The name of the repository, this must be unique amongst repositories. + The created for the repository. + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + Creates the default type of which is a + object. + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The specified repository already exists. + + + + Creates a repository with the specified name. + + The name of the repository, this must be unique amongst repositories. + The created for the repository. + + + Creates the default type of which is a + object. + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The specified repository already exists. + + + + Creates a repository with the specified name and repository type. + + The name of the repository, this must be unique to the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + The name must be unique. Repositories cannot be redefined. + An Exception will be thrown if the repository already exists. + + + The specified repository already exists. + + + + Creates a repository with the specified name and repository type. + + The name of the repository, this must be unique to the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + The name must be unique. Repositories cannot be redefined. + An Exception will be thrown if the repository already exists. + + + The specified repository already exists. + + + + Creates a repository for the specified assembly and repository type. + + The assembly to use to get the name of the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + + + + Creates a repository for the specified assembly and repository type. + + The assembly to use to get the name of the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + + + + Gets an array of all currently defined repositories. + + An array of all the known objects. + + + Gets an array of all currently defined repositories. + + + + + + Internal method to get pertinent version info. + + A string of version info. + + + + Called when the event fires + + the that is exiting + null + + + Called when the event fires. + + + When the event is triggered the log4net system is . + + + + + + Called when the event fires + + the that is exiting + null + + + Called when the event fires. + + + When the event is triggered the log4net system is . + + + + + + Initialize the default repository selector + + + + + Gets or sets the repository selector used by the . + + + The repository selector used by the . + + + + The repository selector () is used by + the to create and select repositories + (). + + + The caller to supplies either a string name + or an assembly (if not supplied the assembly is inferred using + ). + + + This context is used by the selector to lookup a specific repository. + + + For the full .NET Framework, the default repository is DefaultRepositorySelector; + for the .NET Compact Framework CompactRepositorySelector is the default + repository. + + + + + + Implementation of the interface. + + + + This class should be used as the base for all wrapper implementations. + + + Nicko Cadell + Gert Driesen + + + + Constructs a new wrapper for the specified logger. + + The logger to wrap. + + + Constructs a new wrapper for the specified logger. + + + + + + The logger that this object is wrapping + + + + + Gets the implementation behind this wrapper object. + + + The object that this object is implementing. + + + + The Logger object may not be the same object as this object + because of logger decorators. + + + This gets the actual underlying objects that is used to process + the log events. + + + + + + Portable data structure used by + + + + Portable data structure used by + + + Nicko Cadell + + + + The logger name. + + + + The logger name. + + + + + + Level of logging event. + + + + Level of logging event. Level cannot be Serializable + because it is a flyweight. Due to its special serialization it + cannot be declared final either. + + + + + + The application supplied message. + + + + The application supplied message of logging event. + + + + + + The name of thread + + + + The name of thread in which this logging event was generated + + + + + + The time the event was logged + + + + The TimeStamp is stored in the local time zone for this computer. + + + + + + Location information for the caller. + + + + Location information for the caller. + + + + + + String representation of the user + + + + String representation of the user's windows name, + like DOMAIN\username + + + + + + String representation of the identity. + + + + String representation of the current thread's principal identity. + + + + + + The string representation of the exception + + + + The string representation of the exception + + + + + + String representation of the AppDomain. + + + + String representation of the AppDomain. + + + + + + Additional event specific properties + + + + A logger or an appender may attach additional + properties to specific events. These properties + have a string key and an object value. + + + + + + Flags passed to the property + + + + Flags passed to the property + + + Nicko Cadell + + + + Fix the MDC + + + + + Fix the NDC + + + + + Fix the rendered message + + + + + Fix the thread name + + + + + Fix the callers location information + + + CAUTION: Very slow to generate + + + + + Fix the callers windows user name + + + CAUTION: Slow to generate + + + + + Fix the domain friendly name + + + + + Fix the callers principal name + + + CAUTION: May be slow to generate + + + + + Fix the exception text + + + + + Fix the event properties + + + + + No fields fixed + + + + + All fields fixed + + + + + Partial fields fixed + + + + This set of partial fields gives good performance. The following fields are fixed: + + + + + + + + + + + + + The internal representation of logging events. + + + + When an affirmative decision is made to log then a + instance is created. This instance + is passed around to the different log4net components. + + + This class is of concern to those wishing to extend log4net. + + + Some of the values in instances of + are considered volatile, that is the values are correct at the + time the event is delivered to appenders, but will not be consistent + at any time afterwards. If an event is to be stored and then processed + at a later time these volatile values must be fixed by calling + . There is a performance penalty + for incurred by calling but it + is essential to maintaining data consistency. + + + Nicko Cadell + Gert Driesen + Douglas de la Torre + Daniel Cazzulino + + + + The key into the Properties map for the host name value. + + + + + The key into the Properties map for the thread identity value. + + + + + The key into the Properties map for the user name value. + + + + + Initializes a new instance of the class + from the supplied parameters. + + The declaring type of the method that is + the stack boundary into the logging system for this call. + The repository this event is logged in. + The name of the logger of this event. + The level of this event. + The message of this event. + The exception for this event. + + + Except , and , + all fields of LoggingEvent are filled when actually needed. Call + to cache all data locally + to prevent inconsistencies. + + This method is called by the log4net framework + to create a logging event. + + + + + + Initializes a new instance of the class + using specific data. + + The declaring type of the method that is + the stack boundary into the logging system for this call. + The repository this event is logged in. + Data used to initialize the logging event. + The fields in the struct that have already been fixed. + + + This constructor is provided to allow a + to be created independently of the log4net framework. This can + be useful if you require a custom serialization scheme. + + + Use the method to obtain an + instance of the class. + + + The parameter should be used to specify which fields in the + struct have been preset. Fields not specified in the + will be captured from the environment if requested or fixed. + + + + + + Initializes a new instance of the class + using specific data. + + The declaring type of the method that is + the stack boundary into the logging system for this call. + The repository this event is logged in. + Data used to initialize the logging event. + + + This constructor is provided to allow a + to be created independently of the log4net framework. This can + be useful if you require a custom serialization scheme. + + + Use the method to obtain an + instance of the class. + + + This constructor sets this objects flags to , + this assumes that all the data relating to this event is passed in via the + parameter and no other data should be captured from the environment. + + + + + + Initializes a new instance of the class + using specific data. + + Data used to initialize the logging event. + + + This constructor is provided to allow a + to be created independently of the log4net framework. This can + be useful if you require a custom serialization scheme. + + + Use the method to obtain an + instance of the class. + + + This constructor sets this objects flags to , + this assumes that all the data relating to this event is passed in via the + parameter and no other data should be captured from the environment. + + + + + + Serialization constructor + + The that holds the serialized object data. + The that contains contextual information about the source or destination. + + + Initializes a new instance of the class + with serialized data. + + + + + + Ensure that the repository is set. + + the value for the repository + + + + Write the rendered message to a TextWriter + + the writer to write the message to + + + Unlike the property this method + does store the message data in the internal cache. Therefore + if called only once this method should be faster than the + property, however if the message is + to be accessed multiple times then the property will be more efficient. + + + + + + Serializes this object into the provided. + + The to populate with data. + The destination for this serialization. + + + The data in this event must be fixed before it can be serialized. + + + The method must be called during the + method call if this event + is to be used outside that method. + + + + + + Gets the portable data for this . + + The for this event. + + + A new can be constructed using a + instance. + + + Does a fix of the data + in the logging event before returning the event data. + + + + + + Gets the portable data for this . + + The set of data to ensure is fixed in the LoggingEventData + The for this event. + + + A new can be constructed using a + instance. + + + + + + Returns this event's exception's rendered using the + . + + + This event's exception's rendered using the . + + + + Obsolete. Use instead. + + + + + + Returns this event's exception's rendered using the + . + + + This event's exception's rendered using the . + + + + Returns this event's exception's rendered using the + . + + + + + + Fix instance fields that hold volatile data. + + + + Some of the values in instances of + are considered volatile, that is the values are correct at the + time the event is delivered to appenders, but will not be consistent + at any time afterwards. If an event is to be stored and then processed + at a later time these volatile values must be fixed by calling + . There is a performance penalty + incurred by calling but it + is essential to maintaining data consistency. + + + Calling is equivalent to + calling passing the parameter + false. + + + See for more + information. + + + + + + Fixes instance fields that hold volatile data. + + Set to true to not fix data that takes a long time to fix. + + + Some of the values in instances of + are considered volatile, that is the values are correct at the + time the event is delivered to appenders, but will not be consistent + at any time afterwards. If an event is to be stored and then processed + at a later time these volatile values must be fixed by calling + . There is a performance penalty + for incurred by calling but it + is essential to maintaining data consistency. + + + The param controls the data that + is fixed. Some of the data that can be fixed takes a long time to + generate, therefore if you do not require those settings to be fixed + they can be ignored by setting the param + to true. This setting will ignore the + and settings. + + + Set to false to ensure that all + settings are fixed. + + + + + + Fix the fields specified by the parameter + + the fields to fix + + + Only fields specified in the will be fixed. + Fields will not be fixed if they have previously been fixed. + It is not possible to 'unfix' a field. + + + + + + Lookup a composite property in this event + + the key for the property to lookup + the value for the property + + + This event has composite properties that combine together properties from + several different contexts in the following order: + + + this events properties + + This event has that can be set. These + properties are specific to this event only. + + + + the thread properties + + The that are set on the current + thread. These properties are shared by all events logged on this thread. + + + + the global properties + + The that are set globally. These + properties are shared by all the threads in the AppDomain. + + + + + + + + + Get all the composite properties in this event + + the containing all the properties + + + See for details of the composite properties + stored by the event. + + + This method returns a single containing all the + properties defined for this event. + + + + + + The internal logging event data. + + + + + The internal logging event data. + + + + + The internal logging event data. + + + + + The fully qualified Type of the calling + logger class in the stack frame (i.e. the declaring type of the method). + + + + + The application supplied message of logging event. + + + + + The exception that was thrown. + + + This is not serialized. The string representation + is serialized instead. + + + + + The repository that generated the logging event + + + This is not serialized. + + + + + The fix state for this event + + + These flags indicate which fields have been fixed. + Not serialized. + + + + + Indicated that the internal cache is updateable (ie not fixed) + + + This is a seperate flag to m_fixFlags as it allows incrementel fixing and simpler + changes in the caching strategy. + + + + + Gets the time when the current process started. + + + This is the time when this process started. + + + + The TimeStamp is stored in the local time zone for this computer. + + + Tries to get the start time for the current process. + Failing that it returns the time of the first call to + this property. + + + Note that AppDomains may be loaded and unloaded within the + same process without the process terminating and therefore + without the process start time being reset. + + + + + + Gets the of the logging event. + + + The of the logging event. + + + + Gets the of the logging event. + + + + + + Gets the time of the logging event. + + + The time of the logging event. + + + + The TimeStamp is stored in the local time zone for this computer. + + + + + + Gets the name of the logger that logged the event. + + + The name of the logger that logged the event. + + + + Gets the name of the logger that logged the event. + + + + + + Gets the location information for this logging event. + + + The location information for this logging event. + + + + The collected information is cached for future use. + + + See the class for more information on + supported frameworks and the different behavior in Debug and + Release builds. + + + + + + Gets the message object used to initialize this event. + + + The message object used to initialize this event. + + + + Gets the message object used to initialize this event. + Note that this event may not have a valid message object. + If the event is serialized the message object will not + be transferred. To get the text of the message the + property must be used + not this property. + + + If there is no defined message object for this event then + null will be returned. + + + + + + Gets the exception object used to initialize this event. + + + The exception object used to initialize this event. + + + + Gets the exception object used to initialize this event. + Note that this event may not have a valid exception object. + If the event is serialized the exception object will not + be transferred. To get the text of the exception the + method must be used + not this property. + + + If there is no defined exception object for this event then + null will be returned. + + + + + + The that this event was created in. + + + + The that this event was created in. + + + + + + Gets the message, rendered through the . + + + The message rendered through the . + + + + The collected information is cached for future use. + + + + + + Gets the name of the current thread. + + + The name of the current thread, or the thread ID when + the name is not available. + + + + The collected information is cached for future use. + + + + + + Gets the name of the current user. + + + The name of the current user, or NOT AVAILABLE when the + underlying runtime has no support for retrieving the name of the + current user. + + + + Calls WindowsIdentity.GetCurrent().Name to get the name of + the current windows user. + + + To improve performance, we could cache the string representation of + the name, and reuse that as long as the identity stayed constant. + Once the identity changed, we would need to re-assign and re-render + the string. + + + However, the WindowsIdentity.GetCurrent() call seems to + return different objects every time, so the current implementation + doesn't do this type of caching. + + + Timing for these operations: + + + + Method + Results + + + WindowsIdentity.GetCurrent() + 10000 loops, 00:00:00.2031250 seconds + + + WindowsIdentity.GetCurrent().Name + 10000 loops, 00:00:08.0468750 seconds + + + + This means we could speed things up almost 40 times by caching the + value of the WindowsIdentity.GetCurrent().Name property, since + this takes (8.04-0.20) = 7.84375 seconds. + + + + + + Gets the identity of the current thread principal. + + + The string name of the identity of the current thread principal. + + + + Calls System.Threading.Thread.CurrentPrincipal.Identity.Name to get + the name of the current thread principal. + + + + + + Gets the AppDomain friendly name. + + + The AppDomain friendly name. + + + + Gets the AppDomain friendly name. + + + + + + Additional event specific properties. + + + Additional event specific properties. + + + + A logger or an appender may attach additional + properties to specific events. These properties + have a string key and an object value. + + + This property is for events that have been added directly to + this event. The aggregate properties (which include these + event properties) can be retrieved using + and . + + + Once the properties have been fixed this property + returns the combined cached properties. This ensures that updates to + this property are always reflected in the underlying storage. When + returning the combined properties there may be more keys in the + Dictionary than expected. + + + + + + The fixed fields in this event + + + The set of fields that are fixed in this event + + + + Fields will not be fixed if they have previously been fixed. + It is not possible to 'unfix' a field. + + + + + + Implementation of wrapper interface. + + + + This implementation of the interface + forwards to the held by the base class. + + + This logger has methods to allow the caller to log at the following + levels: + + + + DEBUG + + The and methods log messages + at the DEBUG level. That is the level with that name defined in the + repositories . The default value + for this level is . The + property tests if this level is enabled for logging. + + + + INFO + + The and methods log messages + at the INFO level. That is the level with that name defined in the + repositories . The default value + for this level is . The + property tests if this level is enabled for logging. + + + + WARN + + The and methods log messages + at the WARN level. That is the level with that name defined in the + repositories . The default value + for this level is . The + property tests if this level is enabled for logging. + + + + ERROR + + The and methods log messages + at the ERROR level. That is the level with that name defined in the + repositories . The default value + for this level is . The + property tests if this level is enabled for logging. + + + + FATAL + + The and methods log messages + at the FATAL level. That is the level with that name defined in the + repositories . The default value + for this level is . The + property tests if this level is enabled for logging. + + + + + The values for these levels and their semantic meanings can be changed by + configuring the for the repository. + + + Nicko Cadell + Gert Driesen + + + + The ILog interface is use by application to log messages into + the log4net framework. + + + + Use the to obtain logger instances + that implement this interface. The + static method is used to get logger instances. + + + This class contains methods for logging at different levels and also + has properties for determining if those logging levels are + enabled in the current configuration. + + + This interface can be implemented in different ways. This documentation + specifies reasonable behavior that a caller can expect from the actual + implementation, however different implementations reserve the right to + do things differently. + + + Simple example of logging messages + + ILog log = LogManager.GetLogger("application-log"); + + log.Info("Application Start"); + log.Debug("This is a debug message"); + + if (log.IsDebugEnabled) + { + log.Debug("This is another debug message"); + } + + + + + Nicko Cadell + Gert Driesen + + + Log a message object with the level. + + Log a message object with the level. + + The message object to log. + + + This method first checks if this logger is DEBUG + enabled by comparing the level of this logger with the + level. If this logger is + DEBUG enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a formatted string with the level. + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + Log a message object with the level. + + Logs a message object with the level. + + + + This method first checks if this logger is INFO + enabled by comparing the level of this logger with the + level. If this logger is + INFO enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of the + additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + The message object to log. + + + + + + Logs a message object with the INFO level including + the stack trace of the passed + as a parameter. + + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a formatted message string with the level. + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + Log a message object with the level. + + Log a message object with the level. + + + + This method first checks if this logger is WARN + enabled by comparing the level of this logger with the + level. If this logger is + WARN enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of the + additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + The message object to log. + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a formatted message string with the level. + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + Log a message object with the level. + + Logs a message object with the level. + + The message object to log. + + + This method first checks if this logger is ERROR + enabled by comparing the level of this logger with the + level. If this logger is + ERROR enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of the + additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a formatted message string with the level. + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + Log a message object with the level. + + Log a message object with the level. + + + + This method first checks if this logger is FATAL + enabled by comparing the level of this logger with the + level. If this logger is + FATAL enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of the + additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + The message object to log. + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a formatted message string with the level. + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Checks if this logger is enabled for the level. + + + true if this logger is enabled for events, false otherwise. + + + + This function is intended to lessen the computational cost of + disabled log debug statements. + + For some ILog interface log, when you write: + + log.Debug("This is entry number: " + i ); + + + You incur the cost constructing the message, string construction and concatenation in + this case, regardless of whether the message is logged or not. + + + If you are worried about speed (who isn't), then you should write: + + + if (log.IsDebugEnabled) + { + log.Debug("This is entry number: " + i ); + } + + + This way you will not incur the cost of parameter + construction if debugging is disabled for log. On + the other hand, if the log is debug enabled, you + will incur the cost of evaluating whether the logger is debug + enabled twice. Once in and once in + the . This is an insignificant overhead + since evaluating a logger takes about 1% of the time it + takes to actually log. This is the preferred style of logging. + + Alternatively if your logger is available statically then the is debug + enabled state can be stored in a static variable like this: + + + private static readonly bool isDebugEnabled = log.IsDebugEnabled; + + + Then when you come to log you can write: + + + if (isDebugEnabled) + { + log.Debug("This is entry number: " + i ); + } + + + This way the debug enabled state is only queried once + when the class is loaded. Using a private static readonly + variable is the most efficient because it is a run time constant + and can be heavily optimized by the JIT compiler. + + + Of course if you use a static readonly variable to + hold the enabled state of the logger then you cannot + change the enabled state at runtime to vary the logging + that is produced. You have to decide if you need absolute + speed or runtime flexibility. + + + + + + + + Checks if this logger is enabled for the level. + + + true if this logger is enabled for events, false otherwise. + + + For more information see . + + + + + + + + Checks if this logger is enabled for the level. + + + true if this logger is enabled for events, false otherwise. + + + For more information see . + + + + + + + + Checks if this logger is enabled for the level. + + + true if this logger is enabled for events, false otherwise. + + + For more information see . + + + + + + + + Checks if this logger is enabled for the level. + + + true if this logger is enabled for events, false otherwise. + + + For more information see . + + + + + + + + Construct a new wrapper for the specified logger. + + The logger to wrap. + + + Construct a new wrapper for the specified logger. + + + + + + Virtual method called when the configuration of the repository changes + + the repository holding the levels + + + Virtual method called when the configuration of the repository changes + + + + + + Logs a message object with the DEBUG level. + + The message object to log. + + + This method first checks if this logger is DEBUG + enabled by comparing the level of this logger with the + DEBUG level. If this logger is + DEBUG enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of the + additivity flag. + + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + Logs a message object with the DEBUG level + + The message object to log. + The exception to log, including its stack trace. + + + Logs a message object with the DEBUG level including + the stack trace of the passed + as a parameter. + + + See the form for more detailed information. + + + + + + + Logs a formatted message string with the DEBUG level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the DEBUG level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the DEBUG level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the DEBUG level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the DEBUG level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a message object with the INFO level. + + The message object to log. + + + This method first checks if this logger is INFO + enabled by comparing the level of this logger with the + INFO level. If this logger is + INFO enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + Logs a message object with the INFO level. + + The message object to log. + The exception to log, including its stack trace. + + + Logs a message object with the INFO level including + the stack trace of the + passed as a parameter. + + + See the form for more detailed information. + + + + + + + Logs a formatted message string with the INFO level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the INFO level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the INFO level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the INFO level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the INFO level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a message object with the WARN level. + + the message object to log + + + This method first checks if this logger is WARN + enabled by comparing the level of this logger with the + WARN level. If this logger is + WARN enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger and + also higher in the hierarchy depending on the value of the + additivity flag. + + + WARNING Note that passing an to this + method will print the name of the but no + stack trace. To print a stack trace use the + form instead. + + + + + + Logs a message object with the WARN level + + The message object to log. + The exception to log, including its stack trace. + + + Logs a message object with the WARN level including + the stack trace of the + passed as a parameter. + + + See the form for more detailed information. + + + + + + + Logs a formatted message string with the WARN level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the WARN level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the WARN level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the WARN level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the WARN level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a message object with the ERROR level. + + The message object to log. + + + This method first checks if this logger is ERROR + enabled by comparing the level of this logger with the + ERROR level. If this logger is + ERROR enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger and + also higher in the hierarchy depending on the value of the + additivity flag. + + + WARNING Note that passing an to this + method will print the name of the but no + stack trace. To print a stack trace use the + form instead. + + + + + + Logs a message object with the ERROR level + + The message object to log. + The exception to log, including its stack trace. + + + Logs a message object with the ERROR level including + the stack trace of the + passed as a parameter. + + + See the form for more detailed information. + + + + + + + Logs a formatted message string with the ERROR level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the ERROR level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the ERROR level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the ERROR level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the ERROR level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a message object with the FATAL level. + + The message object to log. + + + This method first checks if this logger is FATAL + enabled by comparing the level of this logger with the + FATAL level. If this logger is + FATAL enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger and + also higher in the hierarchy depending on the value of the + additivity flag. + + + WARNING Note that passing an to this + method will print the name of the but no + stack trace. To print a stack trace use the + form instead. + + + + + + Logs a message object with the FATAL level + + The message object to log. + The exception to log, including its stack trace. + + + Logs a message object with the FATAL level including + the stack trace of the + passed as a parameter. + + + See the form for more detailed information. + + + + + + + Logs a formatted message string with the FATAL level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the FATAL level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the FATAL level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the FATAL level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the FATAL level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Event handler for the event + + the repository + Empty + + + + The fully qualified name of this declaring type not the type of any subclass. + + + + + Checks if this logger is enabled for the DEBUG + level. + + + true if this logger is enabled for DEBUG events, + false otherwise. + + + + This function is intended to lessen the computational cost of + disabled log debug statements. + + + For some log Logger object, when you write: + + + log.Debug("This is entry number: " + i ); + + + You incur the cost constructing the message, concatenation in + this case, regardless of whether the message is logged or not. + + + If you are worried about speed, then you should write: + + + if (log.IsDebugEnabled()) + { + log.Debug("This is entry number: " + i ); + } + + + This way you will not incur the cost of parameter + construction if debugging is disabled for log. On + the other hand, if the log is debug enabled, you + will incur the cost of evaluating whether the logger is debug + enabled twice. Once in IsDebugEnabled and once in + the Debug. This is an insignificant overhead + since evaluating a logger takes about 1% of the time it + takes to actually log. + + + + + + Checks if this logger is enabled for the INFO level. + + + true if this logger is enabled for INFO events, + false otherwise. + + + + See for more information and examples + of using this method. + + + + + + + Checks if this logger is enabled for the WARN level. + + + true if this logger is enabled for WARN events, + false otherwise. + + + + See for more information and examples + of using this method. + + + + + + + Checks if this logger is enabled for the ERROR level. + + + true if this logger is enabled for ERROR events, + false otherwise. + + + + See for more information and examples of using this method. + + + + + + + Checks if this logger is enabled for the FATAL level. + + + true if this logger is enabled for FATAL events, + false otherwise. + + + + See for more information and examples of using this method. + + + + + + + A SecurityContext used by log4net when interacting with protected resources + + + + A SecurityContext used by log4net when interacting with protected resources + for example with operating system services. This can be used to impersonate + a principal that has been granted privileges on the system resources. + + + Nicko Cadell + + + + Impersonate this SecurityContext + + State supplied by the caller + An instance that will + revoke the impersonation of this SecurityContext, or null + + + Impersonate this security context. Further calls on the current + thread should now be made in the security context provided + by this object. When the result + method is called the security + context of the thread should be reverted to the state it was in + before was called. + + + + + + The providers default instances. + + + + A configured component that interacts with potentially protected system + resources uses a to provide the elevated + privileges required. If the object has + been not been explicitly provided to the component then the component + will request one from this . + + + By default the is + an instance of which returns only + objects. This is a reasonable default + where the privileges required are not know by the system. + + + This default behavior can be overridden by subclassing the + and overriding the method to return + the desired objects. The default provider + can be replaced by programmatically setting the value of the + property. + + + An alternative is to use the log4net.Config.SecurityContextProviderAttribute + This attribute can be applied to an assembly in the same way as the + log4net.Config.XmlConfiguratorAttribute". The attribute takes + the type to use as the as an argument. + + + Nicko Cadell + + + + The default provider + + + + + Protected default constructor to allow subclassing + + + + Protected default constructor to allow subclassing + + + + + + Create a SecurityContext for a consumer + + The consumer requesting the SecurityContext + An impersonation context + + + The default implementation is to return a . + + + Subclasses should override this method to provide their own + behavior. + + + + + + Gets or sets the default SecurityContextProvider + + + The default SecurityContextProvider + + + + The default provider is used by configured components that + require a and have not had one + given to them. + + + By default this is an instance of + that returns objects. + + + The default provider can be set programmatically by setting + the value of this property to a sub class of + that has the desired behavior. + + + + + + Delegate used to handle creation of new wrappers. + + The logger to wrap in a wrapper. + + + Delegate used to handle creation of new wrappers. This delegate + is called from the + method to construct the wrapper for the specified logger. + + + The delegate to use is supplied to the + constructor. + + + + + + Maps between logger objects and wrapper objects. + + + + This class maintains a mapping between objects and + objects. Use the method to + lookup the for the specified . + + + New wrapper instances are created by the + method. The default behavior is for this method to delegate construction + of the wrapper to the delegate supplied + to the constructor. This allows specialization of the behavior without + requiring subclassing of this type. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the + + The handler to use to create the wrapper objects. + + + Initializes a new instance of the class with + the specified handler to create the wrapper objects. + + + + + + Gets the wrapper object for the specified logger. + + The wrapper object for the specified logger + + + If the logger is null then the corresponding wrapper is null. + + + Looks up the wrapper it it has previously been requested and + returns it. If the wrapper has never been requested before then + the virtual method is + called. + + + + + + Creates the wrapper object for the specified logger. + + The logger to wrap in a wrapper. + The wrapper object for the logger. + + + This implementation uses the + passed to the constructor to create the wrapper. This method + can be overridden in a subclass. + + + + + + Called when a monitored repository shutdown event is received. + + The that is shutting down + + + This method is called when a that this + is holding loggers for has signaled its shutdown + event . The default + behavior of this method is to release the references to the loggers + and their wrappers generated for this repository. + + + + + + Event handler for repository shutdown event. + + The sender of the event. + The event args. + + + + Map of logger repositories to hashtables of ILogger to ILoggerWrapper mappings + + + + + The handler to use to create the extension wrapper objects. + + + + + Internal reference to the delegate used to register for repository shutdown events. + + + + + Gets the map of logger repositories. + + + Map of logger repositories. + + + + Gets the hashtable that is keyed on . The + values are hashtables keyed on with the + value being the corresponding . + + + + + + Formats a as "HH:mm:ss,fff". + + + + Formats a in the format "HH:mm:ss,fff" for example, "15:49:37,459". + + + Nicko Cadell + Gert Driesen + + + + Render a as a string. + + + + Interface to abstract the rendering of a + instance into a string. + + + The method is used to render the + date to a text writer. + + + Nicko Cadell + Gert Driesen + + + + Formats the specified date as a string. + + The date to format. + The writer to write to. + + + Format the as a string and write it + to the provided. + + + + + + String constant used to specify AbsoluteTimeDateFormat in layouts. Current value is ABSOLUTE. + + + + + String constant used to specify DateTimeDateFormat in layouts. Current value is DATE. + + + + + String constant used to specify ISO8601DateFormat in layouts. Current value is ISO8601. + + + + + Renders the date into a string. Format is "HH:mm:ss". + + The date to render into a string. + The string builder to write to. + + + Subclasses should override this method to render the date + into a string using a precision up to the second. This method + will be called at most once per second and the result will be + reused if it is needed again during the same second. + + + + + + Renders the date into a string. Format is "HH:mm:ss,fff". + + The date to render into a string. + The writer to write to. + + + Uses the method to generate the + time string up to the seconds and then appends the current + milliseconds. The results from are + cached and is called at most once + per second. + + + Sub classes should override + rather than . + + + + + + Last stored time with precision up to the second. + + + + + Last stored time with precision up to the second, formatted + as a string. + + + + + Last stored time with precision up to the second, formatted + as a string. + + + + + Formats a as "dd MMM yyyy HH:mm:ss,fff" + + + + Formats a in the format + "dd MMM yyyy HH:mm:ss,fff" for example, + "06 Nov 1994 15:49:37,459". + + + Nicko Cadell + Gert Driesen + Angelika Schnagl + + + + Default constructor. + + + + Initializes a new instance of the class. + + + + + + Formats the date without the milliseconds part + + The date to format. + The string builder to write to. + + + Formats a DateTime in the format "dd MMM yyyy HH:mm:ss" + for example, "06 Nov 1994 15:49:37". + + + The base class will append the ",fff" milliseconds section. + This method will only be called at most once per second. + + + + + + The format info for the invariant culture. + + + + + Formats the as "yyyy-MM-dd HH:mm:ss,fff". + + + + Formats the specified as a string: "yyyy-MM-dd HH:mm:ss,fff". + + + Nicko Cadell + Gert Driesen + + + + Default constructor + + + + Initializes a new instance of the class. + + + + + + Formats the date without the milliseconds part + + The date to format. + The string builder to write to. + + + Formats the date specified as a string: "yyyy-MM-dd HH:mm:ss". + + + The base class will append the ",fff" milliseconds section. + This method will only be called at most once per second. + + + + + + Formats the using the method. + + + + Formats the using the method. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + The format string. + + + Initializes a new instance of the class + with the specified format string. + + + The format string must be compatible with the options + that can be supplied to . + + + + + + Formats the date using . + + The date to convert to a string. + The writer to write to. + + + Uses the date format string supplied to the constructor to call + the method to format the date. + + + + + + The format string used to format the . + + + + The format string must be compatible with the options + that can be supplied to . + + + + + + This filter drops all . + + + + You can add this filter to the end of a filter chain to + switch from the default "accept all unless instructed otherwise" + filtering behavior to a "deny all unless instructed otherwise" + behavior. + + + Nicko Cadell + Gert Driesen + + + + Subclass this type to implement customized logging event filtering + + + + Users should extend this class to implement customized logging + event filtering. Note that and + , the parent class of all standard + appenders, have built-in filtering rules. It is suggested that you + first use and understand the built-in rules before rushing to write + your own custom filters. + + + This abstract class assumes and also imposes that filters be + organized in a linear chain. The + method of each filter is called sequentially, in the order of their + addition to the chain. + + + The method must return one + of the integer constants , + or . + + + If the value is returned, then the log event is dropped + immediately without consulting with the remaining filters. + + + If the value is returned, then the next filter + in the chain is consulted. If there are no more filters in the + chain, then the log event is logged. Thus, in the presence of no + filters, the default behavior is to log all logging events. + + + If the value is returned, then the log + event is logged without consulting the remaining filters. + + + The philosophy of log4net filters is largely inspired from the + Linux ipchains. + + + Nicko Cadell + Gert Driesen + + + + Implement this interface to provide customized logging event filtering + + + + Users should implement this interface to implement customized logging + event filtering. Note that and + , the parent class of all standard + appenders, have built-in filtering rules. It is suggested that you + first use and understand the built-in rules before rushing to write + your own custom filters. + + + This abstract class assumes and also imposes that filters be + organized in a linear chain. The + method of each filter is called sequentially, in the order of their + addition to the chain. + + + The method must return one + of the integer constants , + or . + + + If the value is returned, then the log event is dropped + immediately without consulting with the remaining filters. + + + If the value is returned, then the next filter + in the chain is consulted. If there are no more filters in the + chain, then the log event is logged. Thus, in the presence of no + filters, the default behavior is to log all logging events. + + + If the value is returned, then the log + event is logged without consulting the remaining filters. + + + The philosophy of log4net filters is largely inspired from the + Linux ipchains. + + + Nicko Cadell + Gert Driesen + + + + Decide if the logging event should be logged through an appender. + + The LoggingEvent to decide upon + The decision of the filter + + + If the decision is , then the event will be + dropped. If the decision is , then the next + filter, if any, will be invoked. If the decision is then + the event will be logged without consulting with other filters in + the chain. + + + + + + Property to get and set the next filter + + + The next filter in the chain + + + + Filters are typically composed into chains. This property allows the next filter in + the chain to be accessed. + + + + + + Points to the next filter in the filter chain. + + + + See for more information. + + + + + + Initialize the filter with the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + Typically filter's options become active immediately on set, + however this method must still be called. + + + + + + Decide if the should be logged through an appender. + + The to decide upon + The decision of the filter + + + If the decision is , then the event will be + dropped. If the decision is , then the next + filter, if any, will be invoked. If the decision is then + the event will be logged without consulting with other filters in + the chain. + + + This method is marked abstract and must be implemented + in a subclass. + + + + + + Property to get and set the next filter + + + The next filter in the chain + + + + Filters are typically composed into chains. This property allows the next filter in + the chain to be accessed. + + + + + + Default constructor + + + + + Always returns the integer constant + + the LoggingEvent to filter + Always returns + + + Ignores the event being logged and just returns + . This can be used to change the default filter + chain behavior from to . This filter + should only be used as the last filter in the chain + as any further filters will be ignored! + + + + + + The return result from + + + + The return result from + + + + + + The log event must be dropped immediately without + consulting with the remaining filters, if any, in the chain. + + + + + This filter is neutral with respect to the log event. + The remaining filters, if any, should be consulted for a final decision. + + + + + The log event must be logged immediately without + consulting with the remaining filters, if any, in the chain. + + + + + This is a very simple filter based on matching. + + + + The filter admits two options and + . If there is an exact match between the value + of the option and the of the + , then the method returns in + case the option value is set + to true, if it is false then + is returned. If the does not match then + the result will be . + + + Nicko Cadell + Gert Driesen + + + + flag to indicate if the filter should on a match + + + + + the to match against + + + + + Default constructor + + + + + Tests if the of the logging event matches that of the filter + + the event to filter + see remarks + + + If the of the event matches the level of the + filter then the result of the function depends on the + value of . If it is true then + the function will return , it it is false then it + will return . If the does not match then + the result will be . + + + + + + when matching + + + + The property is a flag that determines + the behavior when a matching is found. If the + flag is set to true then the filter will the + logging event, otherwise it will the event. + + + The default is true i.e. to the event. + + + + + + The that the filter will match + + + + The level that this filter will attempt to match against the + level. If a match is found then + the result depends on the value of . + + + + + + This is a simple filter based on matching. + + + + The filter admits three options and + that determine the range of priorities that are matched, and + . If there is a match between the range + of priorities and the of the , then the + method returns in case the + option value is set to true, if it is false + then is returned. If there is no match, is returned. + + + Nicko Cadell + Gert Driesen + + + + Flag to indicate the behavior when matching a + + + + + the minimum value to match + + + + + the maximum value to match + + + + + Default constructor + + + + + Check if the event should be logged. + + the logging event to check + see remarks + + + If the of the logging event is outside the range + matched by this filter then + is returned. If the is matched then the value of + is checked. If it is true then + is returned, otherwise + is returned. + + + + + + when matching and + + + + The property is a flag that determines + the behavior when a matching is found. If the + flag is set to true then the filter will the + logging event, otherwise it will the event. + + + The default is true i.e. to the event. + + + + + + Set the minimum matched + + + + The minimum level that this filter will attempt to match against the + level. If a match is found then + the result depends on the value of . + + + + + + Sets the maximum matched + + + + The maximum level that this filter will attempt to match against the + level. If a match is found then + the result depends on the value of . + + + + + + Simple filter to match a string in the event's logger name. + + + + The works very similar to the . It admits two + options and . If the + of the starts + with the value of the option, then the + method returns in + case the option value is set to true, + if it is false then is returned. + + + Daniel Cazzulino + + + + Flag to indicate the behavior when we have a match + + + + + The logger name string to substring match against the event + + + + + Default constructor + + + + + Check if this filter should allow the event to be logged + + the event being logged + see remarks + + + The rendered message is matched against the . + If the equals the beginning of + the incoming () + then a match will have occurred. If no match occurs + this function will return + allowing other filters to check the event. If a match occurs then + the value of is checked. If it is + true then is returned otherwise + is returned. + + + + + + when matching + + + + The property is a flag that determines + the behavior when a matching is found. If the + flag is set to true then the filter will the + logging event, otherwise it will the event. + + + The default is true i.e. to the event. + + + + + + The that the filter will match + + + + This filter will attempt to match this value against logger name in + the following way. The match will be done against the beginning of the + logger name (using ). The match is + case sensitive. If a match is found then + the result depends on the value of . + + + + + + Simple filter to match a keyed string in the + + + + Simple filter to match a keyed string in the + + + As the MDC has been replaced with layered properties the + should be used instead. + + + Nicko Cadell + Gert Driesen + + + + Simple filter to match a string an event property + + + + Simple filter to match a string in the value for a + specific event property + + + Nicko Cadell + + + + Simple filter to match a string in the rendered message + + + + Simple filter to match a string in the rendered message + + + Nicko Cadell + Gert Driesen + + + + Flag to indicate the behavior when we have a match + + + + + The string to substring match against the message + + + + + A string regex to match + + + + + A regex object to match (generated from m_stringRegexToMatch) + + + + + Default constructor + + + + + Initialize and precompile the Regex if required + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Check if this filter should allow the event to be logged + + the event being logged + see remarks + + + The rendered message is matched against the . + If the occurs as a substring within + the message then a match will have occurred. If no match occurs + this function will return + allowing other filters to check the event. If a match occurs then + the value of is checked. If it is + true then is returned otherwise + is returned. + + + + + + when matching or + + + + The property is a flag that determines + the behavior when a matching is found. If the + flag is set to true then the filter will the + logging event, otherwise it will the event. + + + The default is true i.e. to the event. + + + + + + Sets the static string to match + + + + The string that will be substring matched against + the rendered message. If the message contains this + string then the filter will match. If a match is found then + the result depends on the value of . + + + One of or + must be specified. + + + + + + Sets the regular expression to match + + + + The regular expression pattern that will be matched against + the rendered message. If the message matches this + pattern then the filter will match. If a match is found then + the result depends on the value of . + + + One of or + must be specified. + + + + + + The key to use to lookup the string from the event properties + + + + + Default constructor + + + + + Check if this filter should allow the event to be logged + + the event being logged + see remarks + + + The event property for the is matched against + the . + If the occurs as a substring within + the property value then a match will have occurred. If no match occurs + this function will return + allowing other filters to check the event. If a match occurs then + the value of is checked. If it is + true then is returned otherwise + is returned. + + + + + + The key to lookup in the event properties and then match against. + + + + The key name to use to lookup in the properties map of the + . The match will be performed against + the value of this property if it exists. + + + + + + Simple filter to match a string in the + + + + Simple filter to match a string in the + + + As the MDC has been replaced with named stacks stored in the + properties collections the should + be used instead. + + + Nicko Cadell + Gert Driesen + + + + Default constructor + + + + Sets the to "NDC". + + + + + + Write the event appdomain name to the output + + + + Writes the to the output writer. + + + Daniel Cazzulino + Nicko Cadell + + + + Abstract class that provides the formatting functionality that + derived classes need. + + + Conversion specifiers in a conversion patterns are parsed to + individual PatternConverters. Each of which is responsible for + converting a logging event in a converter specific manner. + + Nicko Cadell + + + + Abstract class that provides the formatting functionality that + derived classes need. + + + + Conversion specifiers in a conversion patterns are parsed to + individual PatternConverters. Each of which is responsible for + converting a logging event in a converter specific manner. + + + Nicko Cadell + Gert Driesen + + + + Initial buffer size + + + + + Maximum buffer size before it is recycled + + + + + Protected constructor + + + + Initializes a new instance of the class. + + + + + + Evaluate this pattern converter and write the output to a writer. + + that will receive the formatted result. + The state object on which the pattern converter should be executed. + + + Derived pattern converters must override this method in order to + convert conversion specifiers in the appropriate way. + + + + + + Set the next pattern converter in the chains + + the pattern converter that should follow this converter in the chain + the next converter + + + The PatternConverter can merge with its neighbor during this method (or a sub class). + Therefore the return value may or may not be the value of the argument passed in. + + + + + + Write the pattern converter to the writer with appropriate formatting + + that will receive the formatted result. + The state object on which the pattern converter should be executed. + + + This method calls to allow the subclass to perform + appropriate conversion of the pattern converter. If formatting options have + been specified via the then this method will + apply those formattings before writing the output. + + + + + + Fast space padding method. + + to which the spaces will be appended. + The number of spaces to be padded. + + + Fast space padding method. + + + + + + The option string to the converter + + + + + Write an dictionary to a + + the writer to write to + a to use for object conversion + the value to write to the writer + + + Writes the to a writer in the form: + + + {key1=value1, key2=value2, key3=value3} + + + If the specified + is not null then it is used to render the key and value to text, otherwise + the object's ToString method is called. + + + + + + Write an object to a + + the writer to write to + a to use for object conversion + the value to write to the writer + + + Writes the Object to a writer. If the specified + is not null then it is used to render the object to text, otherwise + the object's ToString method is called. + + + + + + Get the next pattern converter in the chain + + + the next pattern converter in the chain + + + + Get the next pattern converter in the chain + + + + + + Gets or sets the formatting info for this converter + + + The formatting info for this converter + + + + Gets or sets the formatting info for this converter + + + + + + Gets or sets the option value for this converter + + + The option for this converter + + + + Gets or sets the option value for this converter + + + + + + Initializes a new instance of the class. + + + + + Derived pattern converters must override this method in order to + convert conversion specifiers in the correct way. + + that will receive the formatted result. + The on which the pattern converter should be executed. + + + + Derived pattern converters must override this method in order to + convert conversion specifiers in the correct way. + + that will receive the formatted result. + The state object on which the pattern converter should be executed. + + + + Flag indicating if this converter handles exceptions + + + false if this converter handles exceptions + + + + + Flag indicating if this converter handles the logging event exception + + false if this converter handles the logging event exception + + + If this converter handles the exception object contained within + , then this property should be set to + false. Otherwise, if the layout ignores the exception + object, then the property should be set to true. + + + Set this value to override a this default setting. The default + value is true, this converter does not handle the exception. + + + + + + Write the event appdomain name to the output + + that will receive the formatted result. + the event being logged + + + Writes the to the output . + + + + + + Date pattern converter, uses a to format + the date of a . + + + + Render the to the writer as a string. + + + The value of the determines + the formatting of the date. The following values are allowed: + + + Option value + Output + + + ISO8601 + + Uses the formatter. + Formats using the "yyyy-MM-dd HH:mm:ss,fff" pattern. + + + + DATE + + Uses the formatter. + Formats using the "dd MMM yyyy HH:mm:ss,fff" for example, "06 Nov 1994 15:49:37,459". + + + + ABSOLUTE + + Uses the formatter. + Formats using the "HH:mm:ss,yyyy" for example, "15:49:37,459". + + + + other + + Any other pattern string uses the formatter. + This formatter passes the pattern string to the + method. + For details on valid patterns see + DateTimeFormatInfo Class. + + + + + + The is in the local time zone and is rendered in that zone. + To output the time in Universal time see . + + + Nicko Cadell + + + + The used to render the date to a string + + + + The used to render the date to a string + + + + + + Initialize the converter pattern based on the property. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Convert the pattern into the rendered message + + that will receive the formatted result. + the event being logged + + + Pass the to the + for it to render it to the writer. + + + The passed is in the local time zone. + + + + + + Write the exception text to the output + + + + If an exception object is stored in the logging event + it will be rendered into the pattern output with a + trailing newline. + + + If there is no exception then nothing will be output + and no trailing newline will be appended. + It is typical to put a newline before the exception + and to have the exception as the last data in the pattern. + + + Nicko Cadell + + + + Default constructor + + + + + Write the exception text to the output + + that will receive the formatted result. + the event being logged + + + If an exception object is stored in the logging event + it will be rendered into the pattern output with a + trailing newline. + + + If there is no exception then nothing will be output + and no trailing newline will be appended. + It is typical to put a newline before the exception + and to have the exception as the last data in the pattern. + + + + + + Writes the caller location file name to the output + + + + Writes the value of the for + the event to the output writer. + + + Nicko Cadell + + + + Write the caller location file name to the output + + that will receive the formatted result. + the event being logged + + + Writes the value of the for + the to the output . + + + + + + Write the caller location info to the output + + + + Writes the to the output writer. + + + Nicko Cadell + + + + Write the caller location info to the output + + that will receive the formatted result. + the event being logged + + + Writes the to the output writer. + + + + + + Writes the event identity to the output + + + + Writes the value of the to + the output writer. + + + Daniel Cazzulino + Nicko Cadell + + + + Writes the event identity to the output + + that will receive the formatted result. + the event being logged + + + Writes the value of the + to + the output . + + + + + + Write the event level to the output + + + + Writes the display name of the event + to the writer. + + + Nicko Cadell + + + + Write the event level to the output + + that will receive the formatted result. + the event being logged + + + Writes the of the + to the . + + + + + + Write the caller location line number to the output + + + + Writes the value of the for + the event to the output writer. + + + Nicko Cadell + + + + Write the caller location line number to the output + + that will receive the formatted result. + the event being logged + + + Writes the value of the for + the to the output . + + + + + + Converter for logger name + + + + Outputs the of the event. + + + Nicko Cadell + + + + Converter to output and truncate '.' separated strings + + + + This abstract class supports truncating a '.' separated string + to show a specified number of elements from the right hand side. + This is used to truncate class names that are fully qualified. + + + Subclasses should override the method to + return the fully qualified string. + + + Nicko Cadell + + + + Initialize the converter + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Get the fully qualified string data + + the event being logged + the fully qualified name + + + Overridden by subclasses to get the fully qualified name before the + precision is applied to it. + + + Return the fully qualified '.' (dot/period) separated string. + + + + + + Convert the pattern to the rendered message + + that will receive the formatted result. + the event being logged + + Render the to the precision + specified by the property. + + + + + Gets the fully qualified name of the logger + + the event being logged + The fully qualified logger name + + + Returns the of the . + + + + + + Writes the event message to the output + + + + Uses the method + to write out the event message. + + + Nicko Cadell + + + + Writes the event message to the output + + that will receive the formatted result. + the event being logged + + + Uses the method + to write out the event message. + + + + + + Write the method name to the output + + + + Writes the caller location to + the output. + + + Nicko Cadell + + + + Write the method name to the output + + that will receive the formatted result. + the event being logged + + + Writes the caller location to + the output. + + + + + + Converter to include event NDC + + + + Outputs the value of the event property named NDC. + + + The should be used instead. + + + Nicko Cadell + + + + Write the event NDC to the output + + that will receive the formatted result. + the event being logged + + + As the thread context stacks are now stored in named event properties + this converter simply looks up the value of the NDC property. + + + The should be used instead. + + + + + + Property pattern converter + + + + Writes out the value of a named property. The property name + should be set in the + property. + + + If the is set to null + then all the properties are written as key value pairs. + + + Nicko Cadell + + + + Write the property value to the output + + that will receive the formatted result. + the event being logged + + + Writes out the value of a named property. The property name + should be set in the + property. + + + If the is set to null + then all the properties are written as key value pairs. + + + + + + Converter to output the relative time of the event + + + + Converter to output the time of the event relative to the start of the program. + + + Nicko Cadell + + + + Write the relative time to the output + + that will receive the formatted result. + the event being logged + + + Writes out the relative time of the event in milliseconds. + That is the number of milliseconds between the event + and the . + + + + + + Helper method to get the time difference between two DateTime objects + + start time (in the current local time zone) + end time (in the current local time zone) + the time difference in milliseconds + + + + Converter to include event thread name + + + + Writes the to the output. + + + Nicko Cadell + + + + Write the ThreadName to the output + + that will receive the formatted result. + the event being logged + + + Writes the to the . + + + + + + Pattern converter for the class name + + + + Outputs the of the event. + + + Nicko Cadell + + + + Gets the fully qualified name of the class + + the event being logged + The fully qualified type name for the caller location + + + Returns the of the . + + + + + + Converter to include event user name + + Douglas de la Torre + Nicko Cadell + + + + Convert the pattern to the rendered message + + that will receive the formatted result. + the event being logged + + + + Write the TimeStamp to the output + + + + Date pattern converter, uses a to format + the date of a . + + + Uses a to format the + in Universal time. + + + See the for details on the date pattern syntax. + + + + Nicko Cadell + + + + Write the TimeStamp to the output + + that will receive the formatted result. + the event being logged + + + Pass the to the + for it to render it to the writer. + + + The passed is in the local time zone, this is converted + to Universal time before it is rendered. + + + + + + + A Layout that renders only the Exception text from the logging event + + + + A Layout that renders only the Exception text from the logging event. + + + This Layout should only be used with appenders that utilize multiple + layouts (e.g. ). + + + Nicko Cadell + Gert Driesen + + + + Extend this abstract class to create your own log layout format. + + + + This is the base implementation of the + interface. Most layout objects should extend this class. + + + + + + Subclasses must implement the + method. + + + Subclasses should set the in their default + constructor. + + + + Nicko Cadell + Gert Driesen + + + + Interface implemented by layout objects + + + + An object is used to format a + as text. The method is called by an + appender to transform the into a string. + + + The layout can also supply and + text that is appender before any events and after all the events respectively. + + + Nicko Cadell + Gert Driesen + + + + Implement this method to create your own layout format. + + The TextWriter to write the formatted event to + The event to format + + + This method is called by an appender to format + the as text and output to a writer. + + + If the caller does not have a and prefers the + event to be formatted as a then the following + code can be used to format the event into a . + + + StringWriter writer = new StringWriter(); + Layout.Format(writer, loggingEvent); + string formattedEvent = writer.ToString(); + + + + + + The content type output by this layout. + + The content type + + + The content type output by this layout. + + + This is a MIME type e.g. "text/plain". + + + + + + The header for the layout format. + + the layout header + + + The Header text will be appended before any logging events + are formatted and appended. + + + + + + The footer for the layout format. + + the layout footer + + + The Footer text will be appended after all the logging events + have been formatted and appended. + + + + + + Flag indicating if this layout handle exceptions + + false if this layout handles exceptions + + + If this layout handles the exception object contained within + , then the layout should return + false. Otherwise, if the layout ignores the exception + object, then the layout should return true. + + + + + + The header text + + + + See for more information. + + + + + + The footer text + + + + See for more information. + + + + + + Flag indicating if this layout handles exceptions + + + + false if this layout handles exceptions + + + + + + Empty default constructor + + + + Empty default constructor + + + + + + Activate component options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + This method must be implemented by the subclass. + + + + + + Implement this method to create your own layout format. + + The TextWriter to write the formatted event to + The event to format + + + This method is called by an appender to format + the as text. + + + + + + The content type output by this layout. + + The content type is "text/plain" + + + The content type output by this layout. + + + This base class uses the value "text/plain". + To change this value a subclass must override this + property. + + + + + + The header for the layout format. + + the layout header + + + The Header text will be appended before any logging events + are formatted and appended. + + + + + + The footer for the layout format. + + the layout footer + + + The Footer text will be appended after all the logging events + have been formatted and appended. + + + + + + Flag indicating if this layout handles exceptions + + false if this layout handles exceptions + + + If this layout handles the exception object contained within + , then the layout should return + false. Otherwise, if the layout ignores the exception + object, then the layout should return true. + + + Set this value to override a this default setting. The default + value is true, this layout does not handle the exception. + + + + + + Default constructor + + + + Constructs a ExceptionLayout + + + + + + Activate component options + + + + Part of the component activation + framework. + + + This method does nothing as options become effective immediately. + + + + + + Gets the exception text from the logging event + + The TextWriter to write the formatted event to + the event being logged + + + Write the exception string to the . + The exception string is retrieved from . + + + + + + Interface for raw layout objects + + + + Interface used to format a + to an object. + + + This interface should not be confused with the + interface. This interface is used in + only certain specialized situations where a raw object is + required rather than a formatted string. The + is not generally useful than this interface. + + + Nicko Cadell + Gert Driesen + + + + Implement this method to create your own layout format. + + The event to format + returns the formatted event + + + Implement this method to create your own layout format. + + + + + + Adapts any to a + + + + Where an is required this adapter + allows a to be specified. + + + Nicko Cadell + Gert Driesen + + + + The layout to adapt + + + + + Construct a new adapter + + the layout to adapt + + + Create the adapter for the specified . + + + + + + Format the logging event as an object. + + The event to format + returns the formatted event + + + Format the logging event as an object. + + + Uses the object supplied to + the constructor to perform the formatting. + + + + + + A flexible layout configurable with pattern string. + + + + The goal of this class is to a + as a string. The results + depend on the conversion pattern. + + + The conversion pattern is closely related to the conversion + pattern of the printf function in C. A conversion pattern is + composed of literal text and format control expressions called + conversion specifiers. + + + You are free to insert any literal text within the conversion + pattern. + + + Each conversion specifier starts with a percent sign (%) and is + followed by optional format modifiers and a conversion + pattern name. The conversion pattern name specifies the type of + data, e.g. logger, level, date, thread name. The format + modifiers control such things as field width, padding, left and + right justification. The following is a simple example. + + + Let the conversion pattern be "%-5level [%thread]: %message%newline" and assume + that the log4net environment was set to use a PatternLayout. Then the + statements + + + ILog log = LogManager.GetLogger(typeof(TestApp)); + log.Debug("Message 1"); + log.Warn("Message 2"); + + would yield the output + + DEBUG [main]: Message 1 + WARN [main]: Message 2 + + + Note that there is no explicit separator between text and + conversion specifiers. The pattern parser knows when it has reached + the end of a conversion specifier when it reads a conversion + character. In the example above the conversion specifier + %-5level means the level of the logging event should be left + justified to a width of five characters. + + + The recognized conversion pattern names are: + + + + Conversion Pattern Name + Effect + + + a + Equivalent to appdomain + + + appdomain + + Used to output the friendly name of the AppDomain where the + logging event was generated. + + + + c + Equivalent to logger + + + C + Equivalent to type + + + class + Equivalent to type + + + d + Equivalent to date + + + date + + + Used to output the date of the logging event in the local time zone. + To output the date in universal time use the %utcdate pattern. + The date conversion + specifier may be followed by a date format specifier enclosed + between braces. For example, %date{HH:mm:ss,fff} or + %date{dd MMM yyyy HH:mm:ss,fff}. If no date format specifier is + given then ISO8601 format is + assumed (). + + + The date format specifier admits the same syntax as the + time pattern string of the . + + + For better results it is recommended to use the log4net date + formatters. These can be specified using one of the strings + "ABSOLUTE", "DATE" and "ISO8601" for specifying + , + and respectively + . For example, + %date{ISO8601} or %date{ABSOLUTE}. + + + These dedicated date formatters perform significantly + better than . + + + + + exception + + + Used to output the exception passed in with the log message. + + + If an exception object is stored in the logging event + it will be rendered into the pattern output with a + trailing newline. + If there is no exception then nothing will be output + and no trailing newline will be appended. + It is typical to put a newline before the exception + and to have the exception as the last data in the pattern. + + + + + F + Equivalent to file + + + file + + + Used to output the file name where the logging request was + issued. + + + WARNING Generating caller location information is + extremely slow. Its use should be avoided unless execution speed + is not an issue. + + + See the note below on the availability of caller location information. + + + + + identity + + + Used to output the user name for the currently active user + (Principal.Identity.Name). + + + WARNING Generating caller information is + extremely slow. Its use should be avoided unless execution speed + is not an issue. + + + + + l + Equivalent to location + + + L + Equivalent to line + + + location + + + Used to output location information of the caller which generated + the logging event. + + + The location information depends on the CLI implementation but + usually consists of the fully qualified name of the calling + method followed by the callers source the file name and line + number between parentheses. + + + The location information can be very useful. However, its + generation is extremely slow. Its use should be avoided + unless execution speed is not an issue. + + + See the note below on the availability of caller location information. + + + + + level + + + Used to output the level of the logging event. + + + + + line + + + Used to output the line number from where the logging request + was issued. + + + WARNING Generating caller location information is + extremely slow. Its use should be avoided unless execution speed + is not an issue. + + + See the note below on the availability of caller location information. + + + + + logger + + + Used to output the logger of the logging event. The + logger conversion specifier can be optionally followed by + precision specifier, that is a decimal constant in + brackets. + + + If a precision specifier is given, then only the corresponding + number of right most components of the logger name will be + printed. By default the logger name is printed in full. + + + For example, for the logger name "a.b.c" the pattern + %logger{2} will output "b.c". + + + + + m + Equivalent to message + + + M + Equivalent to method + + + message + + + Used to output the application supplied message associated with + the logging event. + + + + + mdc + + + The MDC (old name for the ThreadContext.Properties) is now part of the + combined event properties. This pattern is supported for compatibility + but is equivalent to property. + + + + + method + + + Used to output the method name where the logging request was + issued. + + + WARNING Generating caller location information is + extremely slow. Its use should be avoided unless execution speed + is not an issue. + + + See the note below on the availability of caller location information. + + + + + n + Equivalent to newline + + + newline + + + Outputs the platform dependent line separator character or + characters. + + + This conversion pattern offers the same performance as using + non-portable line separator strings such as "\n", or "\r\n". + Thus, it is the preferred way of specifying a line separator. + + + + + ndc + + + Used to output the NDC (nested diagnostic context) associated + with the thread that generated the logging event. + + + + + p + Equivalent to level + + + P + Equivalent to property + + + properties + Equivalent to property + + + property + + + Used to output the an event specific property. The key to + lookup must be specified within braces and directly following the + pattern specifier, e.g. %property{user} would include the value + from the property that is keyed by the string 'user'. Each property value + that is to be included in the log must be specified separately. + Properties are added to events by loggers or appenders. By default + the log4net:HostName property is set to the name of machine on + which the event was originally logged. + + + If no key is specified, e.g. %property then all the keys and their + values are printed in a comma separated list. + + + The properties of an event are combined from a number of different + contexts. These are listed below in the order in which they are searched. + + + + the event properties + + The event has that can be set. These + properties are specific to this event only. + + + + the thread properties + + The that are set on the current + thread. These properties are shared by all events logged on this thread. + + + + the global properties + + The that are set globally. These + properties are shared by all the threads in the AppDomain. + + + + + + + + r + Equivalent to timestamp + + + t + Equivalent to thread + + + timestamp + + + Used to output the number of milliseconds elapsed since the start + of the application until the creation of the logging event. + + + + + thread + + + Used to output the name of the thread that generated the + logging event. Uses the thread number if no name is available. + + + + + type + + + Used to output the fully qualified type name of the caller + issuing the logging request. This conversion specifier + can be optionally followed by precision specifier, that + is a decimal constant in brackets. + + + If a precision specifier is given, then only the corresponding + number of right most components of the class name will be + printed. By default the class name is output in fully qualified form. + + + For example, for the class name "log4net.Layout.PatternLayout", the + pattern %type{1} will output "PatternLayout". + + + WARNING Generating the caller class information is + slow. Thus, its use should be avoided unless execution speed is + not an issue. + + + See the note below on the availability of caller location information. + + + + + u + Equivalent to identity + + + username + + + Used to output the WindowsIdentity for the currently + active user. + + + WARNING Generating caller WindowsIdentity information is + extremely slow. Its use should be avoided unless execution speed + is not an issue. + + + + + utcdate + + + Used to output the date of the logging event in universal time. + The date conversion + specifier may be followed by a date format specifier enclosed + between braces. For example, %utcdate{HH:mm:ss,fff} or + %utcdate{dd MMM yyyy HH:mm:ss,fff}. If no date format specifier is + given then ISO8601 format is + assumed (). + + + The date format specifier admits the same syntax as the + time pattern string of the . + + + For better results it is recommended to use the log4net date + formatters. These can be specified using one of the strings + "ABSOLUTE", "DATE" and "ISO8601" for specifying + , + and respectively + . For example, + %utcdate{ISO8601} or %utcdate{ABSOLUTE}. + + + These dedicated date formatters perform significantly + better than . + + + + + w + Equivalent to username + + + x + Equivalent to ndc + + + X + Equivalent to mdc + + + % + + + The sequence %% outputs a single percent sign. + + + + + + The single letter patterns are deprecated in favor of the + longer more descriptive pattern names. + + + By default the relevant information is output as is. However, + with the aid of format modifiers it is possible to change the + minimum field width, the maximum field width and justification. + + + The optional format modifier is placed between the percent sign + and the conversion pattern name. + + + The first optional format modifier is the left justification + flag which is just the minus (-) character. Then comes the + optional minimum field width modifier. This is a decimal + constant that represents the minimum number of characters to + output. If the data item requires fewer characters, it is padded on + either the left or the right until the minimum width is + reached. The default is to pad on the left (right justify) but you + can specify right padding with the left justification flag. The + padding character is space. If the data item is larger than the + minimum field width, the field is expanded to accommodate the + data. The value is never truncated. + + + This behavior can be changed using the maximum field + width modifier which is designated by a period followed by a + decimal constant. If the data item is longer than the maximum + field, then the extra characters are removed from the + beginning of the data item and not from the end. For + example, it the maximum field width is eight and the data item is + ten characters long, then the first two characters of the data item + are dropped. This behavior deviates from the printf function in C + where truncation is done from the end. + + + Below are various format modifier examples for the logger + conversion specifier. + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Format modifierleft justifyminimum widthmaximum widthcomment
%20loggerfalse20none + + Left pad with spaces if the logger name is less than 20 + characters long. + +
%-20loggertrue20none + + Right pad with spaces if the logger + name is less than 20 characters long. + +
%.30loggerNAnone30 + + Truncate from the beginning if the logger + name is longer than 30 characters. + +
%20.30loggerfalse2030 + + Left pad with spaces if the logger name is shorter than 20 + characters. However, if logger name is longer than 30 characters, + then truncate from the beginning. + +
%-20.30loggertrue2030 + + Right pad with spaces if the logger name is shorter than 20 + characters. However, if logger name is longer than 30 characters, + then truncate from the beginning. + +
+
+ + Note about caller location information.
+ The following patterns %type %file %line %method %location %class %C %F %L %l %M + all generate caller location information. + Location information uses the System.Diagnostics.StackTrace class to generate + a call stack. The caller's information is then extracted from this stack. +
+ + + The System.Diagnostics.StackTrace class is not supported on the + .NET Compact Framework 1.0 therefore caller location information is not + available on that framework. + + + + + The System.Diagnostics.StackTrace class has this to say about Release builds: + + + "StackTrace information will be most informative with Debug build configurations. + By default, Debug builds include debug symbols, while Release builds do not. The + debug symbols contain most of the file, method name, line number, and column + information used in constructing StackFrame and StackTrace objects. StackTrace + might not report as many method calls as expected, due to code transformations + that occur during optimization." + + + This means that in a Release build the caller information may be incomplete or may + not exist at all! Therefore caller location information cannot be relied upon in a Release build. + + + + Additional pattern converters may be registered with a specific + instance using the method. + +
+ + This is a more detailed pattern. + %timestamp [%thread] %level %logger %ndc - %message%newline + + + A similar pattern except that the relative time is + right padded if less than 6 digits, thread name is right padded if + less than 15 characters and truncated if longer and the logger + name is left padded if shorter than 30 characters and truncated if + longer. + %-6timestamp [%15.15thread] %-5level %30.30logger %ndc - %message%newline + + Nicko Cadell + Gert Driesen + Douglas de la Torre + Daniel Cazzulino +
+ + + Default pattern string for log output. + + + + Default pattern string for log output. + Currently set to the string "%message%newline" + which just prints the application supplied message. + + + + + + A detailed conversion pattern + + + + A conversion pattern which includes Time, Thread, Logger, and Nested Context. + Current value is %timestamp [%thread] %level %logger %ndc - %message%newline. + + + + + + Internal map of converter identifiers to converter types. + + + + This static map is overridden by the m_converterRegistry instance map + + + + + + the pattern + + + + + the head of the pattern converter chain + + + + + patterns defined on this PatternLayout only + + + + + Initialize the global registry + + + + Defines the builtin global rules. + + + + + + Constructs a PatternLayout using the DefaultConversionPattern + + + + The default pattern just produces the application supplied message. + + + Note to Inheritors: This constructor calls the virtual method + . If you override this method be + aware that it will be called before your is called constructor. + + + As per the contract the + method must be called after the properties on this object have been + configured. + + + + + + Constructs a PatternLayout using the supplied conversion pattern + + the pattern to use + + + Note to Inheritors: This constructor calls the virtual method + . If you override this method be + aware that it will be called before your is called constructor. + + + When using this constructor the method + need not be called. This may not be the case when using a subclass. + + + + + + Create the pattern parser instance + + the pattern to parse + The that will format the event + + + Creates the used to parse the conversion string. Sets the + global and instance rules on the . + + + + + + Initialize layout options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Produces a formatted string as specified by the conversion pattern. + + the event being logged + The TextWriter to write the formatted event to + + + Parse the using the patter format + specified in the property. + + + + + + Add a converter to this PatternLayout + + the converter info + + + This version of the method is used by the configurator. + Programmatic users should use the alternative method. + + + + + + Add a converter to this PatternLayout + + the name of the conversion pattern for this converter + the type of the converter + + + Add a named pattern converter to this instance. This + converter will be used in the formatting of the event. + This method must be called before . + + + The specified must extend the + type. + + + + + + The pattern formatting string + + + + The ConversionPattern option. This is the string which + controls formatting and consists of a mix of literal content and + conversion specifiers. + + + + + + Wrapper class used to map converter names to converter types + + + + Pattern converter info class used during configuration to + pass to the + method. + + + + + + default constructor + + + + + Gets or sets the name of the conversion pattern + + + + The name of the pattern in the format string + + + + + + Gets or sets the type of the converter + + + + The value specified must extend the + type. + + + + + + Type converter for the interface + + + + Used to convert objects to the interface. + Supports converting from the interface to + the interface using the . + + + Nicko Cadell + Gert Driesen + + + + Interface supported by type converters + + + + This interface supports conversion from arbitrary types + to a single target type. See . + + + Nicko Cadell + Gert Driesen + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Test if the can be converted to the + type supported by this converter. + + + + + + Convert the source object to the type supported by this object + + the object to convert + the converted object + + + Converts the to the type supported + by this converter. + + + + + + Can the sourceType be converted to an + + the source to be to be converted + true if the source type can be converted to + + + Test if the can be converted to a + . Only is supported + as the . + + + + + + Convert the value to a object + + the value to convert + the object + + + Convert the object to a + object. If the object + is a then the + is used to adapt between the two interfaces, otherwise an + exception is thrown. + + + + + + Extract the value of a property from the + + + + Extract the value of a property from the + + + Nicko Cadell + + + + Constructs a RawPropertyLayout + + + + + Lookup the property for + + The event to format + returns property value + + + Looks up and returns the object value of the property + named . If there is no property defined + with than name then null will be returned. + + + + + + The name of the value to lookup in the LoggingEvent Properties collection. + + + Value to lookup in the LoggingEvent Properties collection + + + + String name of the property to lookup in the . + + + + + + Extract the date from the + + + + Extract the date from the + + + Nicko Cadell + Gert Driesen + + + + Constructs a RawTimeStampLayout + + + + + Gets the as a . + + The event to format + returns the time stamp + + + Gets the as a . + + + The time stamp is in local time. To format the time stamp + in universal time use . + + + + + + Extract the date from the + + + + Extract the date from the + + + Nicko Cadell + Gert Driesen + + + + Constructs a RawUtcTimeStampLayout + + + + + Gets the as a . + + The event to format + returns the time stamp + + + Gets the as a . + + + The time stamp is in universal time. To format the time stamp + in local time use . + + + + + + A very simple layout + + + + SimpleLayout consists of the level of the log statement, + followed by " - " and then the log message itself. For example, + + DEBUG - Hello world + + + + Nicko Cadell + Gert Driesen + + + + Constructs a SimpleLayout + + + + + Initialize layout options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Produces a simple formatted output. + + the event being logged + The TextWriter to write the formatted event to + + + Formats the event as the level of the even, + followed by " - " and then the log message itself. The + output is terminated by a newline. + + + + + + Layout that formats the log events as XML elements. + + + + The output of the consists of a series of + log4net:event elements. It does not output a complete well-formed XML + file. The output is designed to be included as an external entity + in a separate file to form a correct XML file. + + + For example, if abc is the name of the file where + the output goes, then a well-formed XML file would + be: + + + <?xml version="1.0" ?> + + <!DOCTYPE log4net:events SYSTEM "log4net-events.dtd" [<!ENTITY data SYSTEM "abc">]> + + <log4net:events version="1.2" xmlns:log4net="http://logging.apache.org/log4net/schemas/log4net-events-1.2> + &data; + </log4net:events> + + + This approach enforces the independence of the + and the appender where it is embedded. + + + The version attribute helps components to correctly + interpret output generated by . The value of + this attribute should be "1.2" for release 1.2 and later. + + + Alternatively the Header and Footer properties can be + configured to output the correct XML header, open tag and close tag. + When setting the Header and Footer properties it is essential + that the underlying data store not be appendable otherwise the data + will become invalid XML. + + + Nicko Cadell + Gert Driesen + + + + Layout that formats the log events as XML elements. + + + + This is an abstract class that must be subclassed by an implementation + to conform to a specific schema. + + + Deriving classes must implement the method. + + + Nicko Cadell + Gert Driesen + + + + Protected constructor to support subclasses + + + + Initializes a new instance of the class + with no location info. + + + + + + Protected constructor to support subclasses + + + + The parameter determines whether + location information will be output by the layout. If + is set to true, then the + file name and line number of the statement at the origin of the log + statement will be output. + + + If you are embedding this layout within an SMTPAppender + then make sure to set the LocationInfo option of that + appender as well. + + + + + + Initialize layout options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Produces a formatted string. + + The event being logged. + The TextWriter to write the formatted event to + + + Format the and write it to the . + + + This method creates an that writes to the + . The is passed + to the method. Subclasses should override the + method rather than this method. + + + + + + Does the actual writing of the XML. + + The writer to use to output the event to. + The event to write. + + + Subclasses should override this method to format + the as XML. + + + + + + Flag to indicate if location information should be included in + the XML events. + + + + + Writer adapter that ignores Close + + + + + The string to replace invalid chars with + + + + + Gets a value indicating whether to include location information in + the XML events. + + + true if location information should be included in the XML + events; otherwise, false. + + + + If is set to true, then the file + name and line number of the statement at the origin of the log + statement will be output. + + + If you are embedding this layout within an SMTPAppender + then make sure to set the LocationInfo option of that + appender as well. + + + + + + The string to replace characters that can not be expressed in XML with. + + + Not all characters may be expressed in XML. This property contains the + string to replace those that can not with. This defaults to a ?. Set it + to the empty string to simply remove offending characters. For more + details on the allowed character ranges see http://www.w3.org/TR/REC-xml/#charsets + Character replacement will occur in the log message, the property names + and the property values. + + + + + + + Gets the content type output by this layout. + + + As this is the XML layout, the value is always "text/xml". + + + + As this is the XML layout, the value is always "text/xml". + + + + + + Constructs an XmlLayout + + + + + Constructs an XmlLayout. + + + + The LocationInfo option takes a boolean value. By + default, it is set to false which means there will be no location + information output by this layout. If the the option is set to + true, then the file name and line number of the statement + at the origin of the log statement will be output. + + + If you are embedding this layout within an SmtpAppender + then make sure to set the LocationInfo option of that + appender as well. + + + + + + Initialize layout options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + Builds a cache of the element names + + + + + + Does the actual writing of the XML. + + The writer to use to output the event to. + The event to write. + + + Override the base class method + to write the to the . + + + + + + The prefix to use for all generated element names + + + + + The prefix to use for all element names + + + + The default prefix is log4net. Set this property + to change the prefix. If the prefix is set to an empty string + then no prefix will be written. + + + + + + Set whether or not to base64 encode the message. + + + + By default the log message will be written as text to the xml + output. This can cause problems when the message contains binary + data. By setting this to true the contents of the message will be + base64 encoded. If this is set then invalid character replacement + (see ) will not be performed + on the log message. + + + + + + Set whether or not to base64 encode the property values. + + + + By default the properties will be written as text to the xml + output. This can cause problems when one or more properties contain + binary data. By setting this to true the values of the properties + will be base64 encoded. If this is set then invalid character replacement + (see ) will not be performed + on the property values. + + + + + + Layout that formats the log events as XML elements compatible with the log4j schema + + + + Formats the log events according to the http://logging.apache.org/log4j schema. + + + Nicko Cadell + + + + The 1st of January 1970 in UTC + + + + + Constructs an XMLLayoutSchemaLog4j + + + + + Constructs an XMLLayoutSchemaLog4j. + + + + The LocationInfo option takes a boolean value. By + default, it is set to false which means there will be no location + information output by this layout. If the the option is set to + true, then the file name and line number of the statement + at the origin of the log statement will be output. + + + If you are embedding this layout within an SMTPAppender + then make sure to set the LocationInfo option of that + appender as well. + + + + + + Actually do the writing of the xml + + the writer to use + the event to write + + + Generate XML that is compatible with the log4j schema. + + + + + + The version of the log4j schema to use. + + + + Only version 1.2 of the log4j schema is supported. + + + + + + The default object Renderer. + + + + The default renderer supports rendering objects and collections to strings. + + + See the method for details of the output. + + + Nicko Cadell + Gert Driesen + + + + Implement this interface in order to render objects as strings + + + + Certain types require special case conversion to + string form. This conversion is done by an object renderer. + Object renderers implement the + interface. + + + Nicko Cadell + Gert Driesen + + + + Render the object to a string + + The map used to lookup renderers + The object to render + The writer to render to + + + Render the object to a + string. + + + The parameter is + provided to lookup and render other objects. This is + very useful where contains + nested objects of unknown type. The + method can be used to render these objects. + + + + + + Default constructor + + + + Default constructor + + + + + + Render the object to a string + + The map used to lookup renderers + The object to render + The writer to render to + + + Render the object to a string. + + + The parameter is + provided to lookup and render other objects. This is + very useful where contains + nested objects of unknown type. The + method can be used to render these objects. + + + The default renderer supports rendering objects to strings as follows: + + + + Value + Rendered String + + + null + + "(null)" + + + + + + + For a one dimensional array this is the + array type name, an open brace, followed by a comma + separated list of the elements (using the appropriate + renderer), followed by a close brace. + + + For example: int[] {1, 2, 3}. + + + If the array is not one dimensional the + Array.ToString() is returned. + + + + + , & + + + Rendered as an open brace, followed by a comma + separated list of the elements (using the appropriate + renderer), followed by a close brace. + + + For example: {a, b, c}. + + + All collection classes that implement its subclasses, + or generic equivalents all implement the interface. + + + + + + + + Rendered as the key, an equals sign ('='), and the value (using the appropriate + renderer). + + + For example: key=value. + + + + + other + + Object.ToString() + + + + + + + + Render the array argument into a string + + The map used to lookup renderers + the array to render + The writer to render to + + + For a one dimensional array this is the + array type name, an open brace, followed by a comma + separated list of the elements (using the appropriate + renderer), followed by a close brace. For example: + int[] {1, 2, 3}. + + + If the array is not one dimensional the + Array.ToString() is returned. + + + + + + Render the enumerator argument into a string + + The map used to lookup renderers + the enumerator to render + The writer to render to + + + Rendered as an open brace, followed by a comma + separated list of the elements (using the appropriate + renderer), followed by a close brace. For example: + {a, b, c}. + + + + + + Render the DictionaryEntry argument into a string + + The map used to lookup renderers + the DictionaryEntry to render + The writer to render to + + + Render the key, an equals sign ('='), and the value (using the appropriate + renderer). For example: key=value. + + + + + + Map class objects to an . + + + + Maintains a mapping between types that require special + rendering and the that + is used to render them. + + + The method is used to render an + object using the appropriate renderers defined in this map. + + + Nicko Cadell + Gert Driesen + + + + Default Constructor + + + + Default constructor. + + + + + + Render using the appropriate renderer. + + the object to render to a string + the object rendered as a string + + + This is a convenience method used to render an object to a string. + The alternative method + should be used when streaming output to a . + + + + + + Render using the appropriate renderer. + + the object to render to a string + The writer to render to + + + Find the appropriate renderer for the type of the + parameter. This is accomplished by calling the + method. Once a renderer is found, it is + applied on the object and the result is returned + as a . + + + + + + Gets the renderer for the specified object type + + the object to lookup the renderer for + the renderer for + + + Gets the renderer for the specified object type. + + + Syntactic sugar method that calls + with the type of the object parameter. + + + + + + Gets the renderer for the specified type + + the type to lookup the renderer for + the renderer for the specified type + + + Returns the renderer for the specified type. + If no specific renderer has been defined the + will be returned. + + + + + + Internal function to recursively search interfaces + + the type to lookup the renderer for + the renderer for the specified type + + + + Clear the map of renderers + + + + Clear the custom renderers defined by using + . The + cannot be removed. + + + + + + Register an for . + + the type that will be rendered by + the renderer for + + + Register an object renderer for a specific source type. + This renderer will be returned from a call to + specifying the same as an argument. + + + + + + Get the default renderer instance + + the default renderer + + + Get the default renderer + + + + + + Interface implemented by logger repository plugins. + + + + Plugins define additional behavior that can be associated + with a . + The held by the + property is used to store the plugins for a repository. + + + The log4net.Config.PluginAttribute can be used to + attach plugins to repositories created using configuration + attributes. + + + Nicko Cadell + Gert Driesen + + + + Attaches the plugin to the specified . + + The that this plugin should be attached to. + + + A plugin may only be attached to a single repository. + + + This method is called when the plugin is attached to the repository. + + + + + + Is called when the plugin is to shutdown. + + + + This method is called to notify the plugin that + it should stop operating and should detach from + the repository. + + + + + + Gets the name of the plugin. + + + The name of the plugin. + + + + Plugins are stored in the + keyed by name. Each plugin instance attached to a + repository must be a unique name. + + + + + + A strongly-typed collection of objects. + + Nicko Cadell + + + + Creates a read-only wrapper for a PluginCollection instance. + + list to create a readonly wrapper arround + + A PluginCollection wrapper that is read-only. + + + + + Initializes a new instance of the PluginCollection class + that is empty and has the default initial capacity. + + + + + Initializes a new instance of the PluginCollection class + that has the specified initial capacity. + + + The number of elements that the new PluginCollection is initially capable of storing. + + + + + Initializes a new instance of the PluginCollection class + that contains elements copied from the specified PluginCollection. + + The PluginCollection whose elements are copied to the new collection. + + + + Initializes a new instance of the PluginCollection class + that contains elements copied from the specified array. + + The array whose elements are copied to the new list. + + + + Initializes a new instance of the PluginCollection class + that contains elements copied from the specified collection. + + The collection whose elements are copied to the new list. + + + + Allow subclasses to avoid our default constructors + + + + + + + Copies the entire PluginCollection to a one-dimensional + array. + + The one-dimensional array to copy to. + + + + Copies the entire PluginCollection to a one-dimensional + array, starting at the specified index of the target array. + + The one-dimensional array to copy to. + The zero-based index in at which copying begins. + + + + Adds a to the end of the PluginCollection. + + The to be added to the end of the PluginCollection. + The index at which the value has been added. + + + + Removes all elements from the PluginCollection. + + + + + Creates a shallow copy of the . + + A new with a shallow copy of the collection data. + + + + Determines whether a given is in the PluginCollection. + + The to check for. + true if is found in the PluginCollection; otherwise, false. + + + + Returns the zero-based index of the first occurrence of a + in the PluginCollection. + + The to locate in the PluginCollection. + + The zero-based index of the first occurrence of + in the entire PluginCollection, if found; otherwise, -1. + + + + + Inserts an element into the PluginCollection at the specified index. + + The zero-based index at which should be inserted. + The to insert. + + is less than zero + -or- + is equal to or greater than . + + + + + Removes the first occurrence of a specific from the PluginCollection. + + The to remove from the PluginCollection. + + The specified was not found in the PluginCollection. + + + + + Removes the element at the specified index of the PluginCollection. + + The zero-based index of the element to remove. + + is less than zero. + -or- + is equal to or greater than . + + + + + Returns an enumerator that can iterate through the PluginCollection. + + An for the entire PluginCollection. + + + + Adds the elements of another PluginCollection to the current PluginCollection. + + The PluginCollection whose elements should be added to the end of the current PluginCollection. + The new of the PluginCollection. + + + + Adds the elements of a array to the current PluginCollection. + + The array whose elements should be added to the end of the PluginCollection. + The new of the PluginCollection. + + + + Adds the elements of a collection to the current PluginCollection. + + The collection whose elements should be added to the end of the PluginCollection. + The new of the PluginCollection. + + + + Sets the capacity to the actual number of elements. + + + + + is less than zero. + -or- + is equal to or greater than . + + + + + is less than zero. + -or- + is equal to or greater than . + + + + + Gets the number of elements actually contained in the PluginCollection. + + + + + Gets a value indicating whether access to the collection is synchronized (thread-safe). + + true if access to the ICollection is synchronized (thread-safe); otherwise, false. + + + + Gets an object that can be used to synchronize access to the collection. + + + An object that can be used to synchronize access to the collection. + + + + + Gets or sets the at the specified index. + + + The at the specified index. + + The zero-based index of the element to get or set. + + is less than zero. + -or- + is equal to or greater than . + + + + + Gets a value indicating whether the collection has a fixed size. + + true if the collection has a fixed size; otherwise, false. The default is false. + + + + Gets a value indicating whether the IList is read-only. + + true if the collection is read-only; otherwise, false. The default is false. + + + + Gets or sets the number of elements the PluginCollection can contain. + + + The number of elements the PluginCollection can contain. + + + + + Supports type-safe iteration over a . + + + + + + Advances the enumerator to the next element in the collection. + + + true if the enumerator was successfully advanced to the next element; + false if the enumerator has passed the end of the collection. + + + The collection was modified after the enumerator was created. + + + + + Sets the enumerator to its initial position, before the first element in the collection. + + + + + Gets the current element in the collection. + + + + + Type visible only to our subclasses + Used to access protected constructor + + + + + + A value + + + + + Supports simple iteration over a . + + + + + + Initializes a new instance of the Enumerator class. + + + + + + Advances the enumerator to the next element in the collection. + + + true if the enumerator was successfully advanced to the next element; + false if the enumerator has passed the end of the collection. + + + The collection was modified after the enumerator was created. + + + + + Sets the enumerator to its initial position, before the first element in the collection. + + + + + Gets the current element in the collection. + + + The current element in the collection. + + + + + + + + Map of repository plugins. + + + + This class is a name keyed map of the plugins that are + attached to a repository. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + The repository that the plugins should be attached to. + + + Initialize a new instance of the class with a + repository that the plugins should be attached to. + + + + + + Adds a to the map. + + The to add to the map. + + + The will be attached to the repository when added. + + + If there already exists a plugin with the same name + attached to the repository then the old plugin will + be and replaced with + the new plugin. + + + + + + Removes a from the map. + + The to remove from the map. + + + Remove a specific plugin from this map. + + + + + + Gets a by name. + + The name of the to lookup. + + The from the map with the name specified, or + null if no plugin is found. + + + + Lookup a plugin by name. If the plugin is not found null + will be returned. + + + + + + Gets all possible plugins as a list of objects. + + All possible plugins as a list of objects. + + + Get a collection of all the plugins defined in this map. + + + + + + Base implementation of + + + + Default abstract implementation of the + interface. This base class can be used by implementors + of the interface. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + the name of the plugin + + Initializes a new Plugin with the specified name. + + + + + Attaches this plugin to a . + + The that this plugin should be attached to. + + + A plugin may only be attached to a single repository. + + + This method is called when the plugin is attached to the repository. + + + + + + Is called when the plugin is to shutdown. + + + + This method is called to notify the plugin that + it should stop operating and should detach from + the repository. + + + + + + The name of this plugin. + + + + + The repository this plugin is attached to. + + + + + Gets or sets the name of the plugin. + + + The name of the plugin. + + + + Plugins are stored in the + keyed by name. Each plugin instance attached to a + repository must be a unique name. + + + The name of the plugin must not change one the + plugin has been attached to a repository. + + + + + + The repository for this plugin + + + The that this plugin is attached to. + + + + Gets or sets the that this plugin is + attached to. + + + + + + Plugin that listens for events from the + + + + This plugin publishes an instance of + on a specified . This listens for logging events delivered from + a remote . + + + When an event is received it is relogged within the attached repository + as if it had been raised locally. + + + Nicko Cadell + Gert Driesen + + + + Default constructor + + + + Initializes a new instance of the class. + + + The property must be set. + + + + + + Construct with sink Uri. + + The name to publish the sink under in the remoting infrastructure. + See for more details. + + + Initializes a new instance of the class + with specified name. + + + + + + Attaches this plugin to a . + + The that this plugin should be attached to. + + + A plugin may only be attached to a single repository. + + + This method is called when the plugin is attached to the repository. + + + + + + Is called when the plugin is to shutdown. + + + + When the plugin is shutdown the remote logging + sink is disconnected. + + + + + + Gets or sets the URI of this sink. + + + The URI of this sink. + + + + This is the name under which the object is marshaled. + + + + + + + Delivers objects to a remote sink. + + + + Internal class used to listen for logging events + and deliver them to the local repository. + + + + + + Constructor + + The repository to log to. + + + Initializes a new instance of the for the + specified . + + + + + + Logs the events to the repository. + + The events to log. + + + The events passed are logged to the + + + + + + Obtains a lifetime service object to control the lifetime + policy for this instance. + + null to indicate that this instance should live forever. + + + Obtains a lifetime service object to control the lifetime + policy for this instance. This object should live forever + therefore this implementation returns null. + + + + + + The underlying that events should + be logged to. + + + + + Default implementation of + + + + This default implementation of the + interface is used to create the default subclass + of the object. + + + Nicko Cadell + Gert Driesen + + + + Interface abstracts creation of instances + + + + This interface is used by the to + create new objects. + + + The method is called + to create a named . + + + Implement this interface to create new subclasses of . + + + Nicko Cadell + Gert Driesen + + + + Create a new instance + + The name of the . + The instance for the specified name. + + + Create a new instance with the + specified name. + + + Called by the to create + new named instances. + + + If the is null then the root logger + must be returned. + + + + + + Default constructor + + + + Initializes a new instance of the class. + + + + + + Create a new instance + + The name of the . + The instance for the specified name. + + + Create a new instance with the + specified name. + + + Called by the to create + new named instances. + + + If the is null then the root logger + must be returned. + + + + + + Default internal subclass of + + + + This subclass has no additional behavior over the + class but does allow instances + to be created. + + + + + + Implementation of used by + + + + Internal class used to provide implementation of + interface. Applications should use to get + logger instances. + + + This is one of the central classes in the log4net implementation. One of the + distinctive features of log4net are hierarchical loggers and their + evaluation. The organizes the + instances into a rooted tree hierarchy. + + + The class is abstract. Only concrete subclasses of + can be created. The + is used to create instances of this type for the . + + + Nicko Cadell + Gert Driesen + Aspi Havewala + Douglas de la Torre + + + + This constructor created a new instance and + sets its name. + + The name of the . + + + This constructor is protected and designed to be used by + a subclass that is not abstract. + + + Loggers are constructed by + objects. See for the default + logger creator. + + + + + + Add to the list of appenders of this + Logger instance. + + An appender to add to this logger + + + Add to the list of appenders of this + Logger instance. + + + If is already in the list of + appenders, then it won't be added again. + + + + + + Look for the appender named as name + + The name of the appender to lookup + The appender with the name specified, or null. + + + Returns the named appender, or null if the appender is not found. + + + + + + Remove all previously added appenders from this Logger instance. + + + + Remove all previously added appenders from this Logger instance. + + + This is useful when re-reading configuration information. + + + + + + Remove the appender passed as parameter form the list of appenders. + + The appender to remove + The appender removed from the list + + + Remove the appender passed as parameter form the list of appenders. + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + + Remove the appender passed as parameter form the list of appenders. + + The name of the appender to remove + The appender removed from the list + + + Remove the named appender passed as parameter form the list of appenders. + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + + This generic form is intended to be used by wrappers. + + The declaring type of the method that is + the stack boundary into the logging system for this call. + The level of the message to be logged. + The message object to log. + The exception to log, including its stack trace. + + + Generate a logging event for the specified using + the and . + + + This method must not throw any exception to the caller. + + + + + + This is the most generic printing method that is intended to be used + by wrappers. + + The event being logged. + + + Logs the specified logging event through this logger. + + + This method must not throw any exception to the caller. + + + + + + Checks if this logger is enabled for a given passed as parameter. + + The level to check. + + true if this logger is enabled for level, otherwise false. + + + + Test if this logger is going to log events of the specified . + + + This method must not throw any exception to the caller. + + + + + + Deliver the to the attached appenders. + + The event to log. + + + Call the appenders in the hierarchy starting at + this. If no appenders could be found, emit a + warning. + + + This method calls all the appenders inherited from the + hierarchy circumventing any evaluation of whether to log or not + to log the particular log request. + + + + + + Closes all attached appenders implementing the interface. + + + + Used to ensure that the appenders are correctly shutdown. + + + + + + This is the most generic printing method. This generic form is intended to be used by wrappers + + The level of the message to be logged. + The message object to log. + The exception to log, including its stack trace. + + + Generate a logging event for the specified using + the . + + + + + + Creates a new logging event and logs the event without further checks. + + The declaring type of the method that is + the stack boundary into the logging system for this call. + The level of the message to be logged. + The message object to log. + The exception to log, including its stack trace. + + + Generates a logging event and delivers it to the attached + appenders. + + + + + + Creates a new logging event and logs the event without further checks. + + The event being logged. + + + Delivers the logging event to the attached appenders. + + + + + + The fully qualified type of the Logger class. + + + + + The name of this logger. + + + + + The assigned level of this logger. + + + + The level variable need not be + assigned a value in which case it is inherited + form the hierarchy. + + + + + + The parent of this logger. + + + + The parent of this logger. + All loggers have at least one ancestor which is the root logger. + + + + + + Loggers need to know what Hierarchy they are in. + + + + Loggers need to know what Hierarchy they are in. + The hierarchy that this logger is a member of is stored + here. + + + + + + Helper implementation of the interface + + + + + Flag indicating if child loggers inherit their parents appenders + + + + Additivity is set to true by default, that is children inherit + the appenders of their ancestors by default. If this variable is + set to false then the appenders found in the + ancestors of this logger are not used. However, the children + of this logger will inherit its appenders, unless the children + have their additivity flag set to false too. See + the user manual for more details. + + + + + + Lock to protect AppenderAttachedImpl variable m_appenderAttachedImpl + + + + + Gets or sets the parent logger in the hierarchy. + + + The parent logger in the hierarchy. + + + + Part of the Composite pattern that makes the hierarchy. + The hierarchy is parent linked rather than child linked. + + + + + + Gets or sets a value indicating if child loggers inherit their parent's appenders. + + + true if child loggers inherit their parent's appenders. + + + + Additivity is set to true by default, that is children inherit + the appenders of their ancestors by default. If this variable is + set to false then the appenders found in the + ancestors of this logger are not used. However, the children + of this logger will inherit its appenders, unless the children + have their additivity flag set to false too. See + the user manual for more details. + + + + + + Gets the effective level for this logger. + + The nearest level in the logger hierarchy. + + + Starting from this logger, searches the logger hierarchy for a + non-null level and returns it. Otherwise, returns the level of the + root logger. + + The Logger class is designed so that this method executes as + quickly as possible. + + + + + Gets or sets the where this + Logger instance is attached to. + + The hierarchy that this logger belongs to. + + + This logger must be attached to a single . + + + + + + Gets or sets the assigned , if any, for this Logger. + + + The of this logger. + + + + The assigned can be null. + + + + + + Get the appenders contained in this logger as an + . + + A collection of the appenders in this logger + + + Get the appenders contained in this logger as an + . If no appenders + can be found, then a is returned. + + + + + + Gets the logger name. + + + The name of the logger. + + + + The name of this logger + + + + + + Gets the where this + Logger instance is attached to. + + + The that this logger belongs to. + + + + Gets the where this + Logger instance is attached to. + + + + + + Construct a new Logger + + the name of the logger + + + Initializes a new instance of the class + with the specified name. + + + + + + Delegate used to handle logger creation event notifications. + + The in which the has been created. + The event args that hold the instance that has been created. + + + Delegate used to handle logger creation event notifications. + + + + + + Provides data for the event. + + + + A event is raised every time a + is created. + + + + + + The created + + + + + Constructor + + The that has been created. + + + Initializes a new instance of the event argument + class,with the specified . + + + + + + Gets the that has been created. + + + The that has been created. + + + + The that has been created. + + + + + + Hierarchical organization of loggers + + + + The casual user should not have to deal with this class + directly. + + + This class is specialized in retrieving loggers by name and + also maintaining the logger hierarchy. Implements the + interface. + + + The structure of the logger hierarchy is maintained by the + method. The hierarchy is such that children + link to their parent but parents do not have any references to their + children. Moreover, loggers can be instantiated in any order, in + particular descendant before ancestor. + + + In case a descendant is created before a particular ancestor, + then it creates a provision node for the ancestor and adds itself + to the provision node. Other descendants of the same ancestor add + themselves to the previously created provision node. + + + Nicko Cadell + Gert Driesen + + + + Base implementation of + + + + Default abstract implementation of the interface. + + + Skeleton implementation of the interface. + All types can extend this type. + + + Nicko Cadell + Gert Driesen + + + + Interface implemented by logger repositories. + + + + This interface is implemented by logger repositories. e.g. + . + + + This interface is used by the + to obtain interfaces. + + + Nicko Cadell + Gert Driesen + + + + Check if the named logger exists in the repository. If so return + its reference, otherwise returns null. + + The name of the logger to lookup + The Logger object with the name specified + + + If the names logger exists it is returned, otherwise + null is returned. + + + + + + Returns all the currently defined loggers as an Array. + + All the defined loggers + + + Returns all the currently defined loggers as an Array. + + + + + + Returns a named logger instance + + The name of the logger to retrieve + The logger object with the name specified + + + Returns a named logger instance. + + + If a logger of that name already exists, then it will be + returned. Otherwise, a new logger will be instantiated and + then linked with its existing ancestors as well as children. + + + + + Shutdown the repository + + + Shutting down a repository will safely close and remove + all appenders in all loggers including the root logger. + + + Some appenders need to be closed before the + application exists. Otherwise, pending logging events might be + lost. + + + The method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + + Reset the repositories configuration to a default state + + + + Reset all values contained in this instance to their + default state. + + + Existing loggers are not removed. They are just reset. + + + This method should be used sparingly and with care as it will + block all logging until it is completed. + + + + + + Log the through this repository. + + the event to log + + + This method should not normally be used to log. + The interface should be used + for routine logging. This interface can be obtained + using the method. + + + The logEvent is delivered to the appropriate logger and + that logger is then responsible for logging the event. + + + + + + Returns all the Appenders that are configured as an Array. + + All the Appenders + + + Returns all the Appenders that are configured as an Array. + + + + + + The name of the repository + + + The name of the repository + + + + The name of the repository. + + + + + + RendererMap accesses the object renderer map for this repository. + + + RendererMap accesses the object renderer map for this repository. + + + + RendererMap accesses the object renderer map for this repository. + + + The RendererMap holds a mapping between types and + objects. + + + + + + The plugin map for this repository. + + + The plugin map for this repository. + + + + The plugin map holds the instances + that have been attached to this repository. + + + + + + Get the level map for the Repository. + + + + Get the level map for the Repository. + + + The level map defines the mappings between + level names and objects in + this repository. + + + + + + The threshold for all events in this repository + + + The threshold for all events in this repository + + + + The threshold for all events in this repository. + + + + + + Flag indicates if this repository has been configured. + + + Flag indicates if this repository has been configured. + + + + Flag indicates if this repository has been configured. + + + + + + Event to notify that the repository has been shutdown. + + + Event to notify that the repository has been shutdown. + + + + Event raised when the repository has been shutdown. + + + + + + Event to notify that the repository has had its configuration reset. + + + Event to notify that the repository has had its configuration reset. + + + + Event raised when the repository's configuration has been + reset to default. + + + + + + Event to notify that the repository has had its configuration changed. + + + Event to notify that the repository has had its configuration changed. + + + + Event raised when the repository's configuration has been changed. + + + + + + Repository specific properties + + + Repository specific properties + + + + These properties can be specified on a repository specific basis. + + + + + + Default Constructor + + + + Initializes the repository with default (empty) properties. + + + + + + Construct the repository using specific properties + + the properties to set for this repository + + + Initializes the repository with specified properties. + + + + + + Test if logger exists + + The name of the logger to lookup + The Logger object with the name specified + + + Check if the named logger exists in the repository. If so return + its reference, otherwise returns null. + + + + + + Returns all the currently defined loggers in the repository + + All the defined loggers + + + Returns all the currently defined loggers in the repository as an Array. + + + + + + Return a new logger instance + + The name of the logger to retrieve + The logger object with the name specified + + + Return a new logger instance. + + + If a logger of that name already exists, then it will be + returned. Otherwise, a new logger will be instantiated and + then linked with its existing ancestors as well as children. + + + + + + Shutdown the repository + + + + Shutdown the repository. Can be overridden in a subclass. + This base class implementation notifies the + listeners and all attached plugins of the shutdown event. + + + + + + Reset the repositories configuration to a default state + + + + Reset all values contained in this instance to their + default state. + + + Existing loggers are not removed. They are just reset. + + + This method should be used sparingly and with care as it will + block all logging until it is completed. + + + + + + Log the logEvent through this repository. + + the event to log + + + This method should not normally be used to log. + The interface should be used + for routine logging. This interface can be obtained + using the method. + + + The logEvent is delivered to the appropriate logger and + that logger is then responsible for logging the event. + + + + + + Returns all the Appenders that are configured as an Array. + + All the Appenders + + + Returns all the Appenders that are configured as an Array. + + + + + + Adds an object renderer for a specific class. + + The type that will be rendered by the renderer supplied. + The object renderer used to render the object. + + + Adds an object renderer for a specific class. + + + + + + Notify the registered listeners that the repository is shutting down + + Empty EventArgs + + + Notify any listeners that this repository is shutting down. + + + + + + Notify the registered listeners that the repository has had its configuration reset + + Empty EventArgs + + + Notify any listeners that this repository's configuration has been reset. + + + + + + Notify the registered listeners that the repository has had its configuration changed + + Empty EventArgs + + + Notify any listeners that this repository's configuration has changed. + + + + + + Raise a configuration changed event on this repository + + EventArgs.Empty + + + Applications that programmatically change the configuration of the repository should + raise this event notification to notify listeners. + + + + + + The name of the repository + + + The string name of the repository + + + + The name of this repository. The name is + used to store and lookup the repositories + stored by the . + + + + + + The threshold for all events in this repository + + + The threshold for all events in this repository + + + + The threshold for all events in this repository + + + + + + RendererMap accesses the object renderer map for this repository. + + + RendererMap accesses the object renderer map for this repository. + + + + RendererMap accesses the object renderer map for this repository. + + + The RendererMap holds a mapping between types and + objects. + + + + + + The plugin map for this repository. + + + The plugin map for this repository. + + + + The plugin map holds the instances + that have been attached to this repository. + + + + + + Get the level map for the Repository. + + + + Get the level map for the Repository. + + + The level map defines the mappings between + level names and objects in + this repository. + + + + + + Flag indicates if this repository has been configured. + + + Flag indicates if this repository has been configured. + + + + Flag indicates if this repository has been configured. + + + + + + Event to notify that the repository has been shutdown. + + + Event to notify that the repository has been shutdown. + + + + Event raised when the repository has been shutdown. + + + + + + Event to notify that the repository has had its configuration reset. + + + Event to notify that the repository has had its configuration reset. + + + + Event raised when the repository's configuration has been + reset to default. + + + + + + Event to notify that the repository has had its configuration changed. + + + Event to notify that the repository has had its configuration changed. + + + + Event raised when the repository's configuration has been changed. + + + + + + Repository specific properties + + + Repository specific properties + + + These properties can be specified on a repository specific basis + + + + + Basic Configurator interface for repositories + + + + Interface used by basic configurator to configure a + with a default . + + + A should implement this interface to support + configuration by the . + + + Nicko Cadell + Gert Driesen + + + + Initialize the repository using the specified appender + + the appender to use to log all logging events + + + Configure the repository to route all logging events to the + specified appender. + + + + + + Configure repository using XML + + + + Interface used by Xml configurator to configure a . + + + A should implement this interface to support + configuration by the . + + + Nicko Cadell + Gert Driesen + + + + Initialize the repository using the specified config + + the element containing the root of the config + + + The schema for the XML configuration data is defined by + the implementation. + + + + + + Default constructor + + + + Initializes a new instance of the class. + + + + + + Construct with properties + + The properties to pass to this repository. + + + Initializes a new instance of the class. + + + + + + Construct with a logger factory + + The factory to use to create new logger instances. + + + Initializes a new instance of the class with + the specified . + + + + + + Construct with properties and a logger factory + + The properties to pass to this repository. + The factory to use to create new logger instances. + + + Initializes a new instance of the class with + the specified . + + + + + + Test if a logger exists + + The name of the logger to lookup + The Logger object with the name specified + + + Check if the named logger exists in the hierarchy. If so return + its reference, otherwise returns null. + + + + + + Returns all the currently defined loggers in the hierarchy as an Array + + All the defined loggers + + + Returns all the currently defined loggers in the hierarchy as an Array. + The root logger is not included in the returned + enumeration. + + + + + + Return a new logger instance named as the first parameter using + the default factory. + + + + Return a new logger instance named as the first parameter using + the default factory. + + + If a logger of that name already exists, then it will be + returned. Otherwise, a new logger will be instantiated and + then linked with its existing ancestors as well as children. + + + The name of the logger to retrieve + The logger object with the name specified + + + + Shutting down a hierarchy will safely close and remove + all appenders in all loggers including the root logger. + + + + Shutting down a hierarchy will safely close and remove + all appenders in all loggers including the root logger. + + + Some appenders need to be closed before the + application exists. Otherwise, pending logging events might be + lost. + + + The Shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + + Reset all values contained in this hierarchy instance to their default. + + + + Reset all values contained in this hierarchy instance to their + default. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set its default "off" value. + + + Existing loggers are not removed. They are just reset. + + + This method should be used sparingly and with care as it will + block all logging until it is completed. + + + + + + Log the logEvent through this hierarchy. + + the event to log + + + This method should not normally be used to log. + The interface should be used + for routine logging. This interface can be obtained + using the method. + + + The logEvent is delivered to the appropriate logger and + that logger is then responsible for logging the event. + + + + + + Returns all the Appenders that are currently configured + + An array containing all the currently configured appenders + + + Returns all the instances that are currently configured. + All the loggers are searched for appenders. The appenders may also be containers + for appenders and these are also searched for additional loggers. + + + The list returned is unordered but does not contain duplicates. + + + + + + Collect the appenders from an . + The appender may also be a container. + + + + + + + Collect the appenders from an container + + + + + + + Initialize the log4net system using the specified appender + + the appender to use to log all logging events + + + + Initialize the log4net system using the specified appender + + the appender to use to log all logging events + + + This method provides the same functionality as the + method implemented + on this object, but it is protected and therefore can be called by subclasses. + + + + + + Initialize the log4net system using the specified config + + the element containing the root of the config + + + + Initialize the log4net system using the specified config + + the element containing the root of the config + + + This method provides the same functionality as the + method implemented + on this object, but it is protected and therefore can be called by subclasses. + + + + + + Test if this hierarchy is disabled for the specified . + + The level to check against. + + true if the repository is disabled for the level argument, false otherwise. + + + + If this hierarchy has not been configured then this method will + always return true. + + + This method will return true if this repository is + disabled for level object passed as parameter and + false otherwise. + + + See also the property. + + + + + + Clear all logger definitions from the internal hashtable + + + + This call will clear all logger definitions from the internal + hashtable. Invoking this method will irrevocably mess up the + logger hierarchy. + + + You should really know what you are doing before + invoking this method. + + + + + + Return a new logger instance named as the first parameter using + . + + The name of the logger to retrieve + The factory that will make the new logger instance + The logger object with the name specified + + + If a logger of that name already exists, then it will be + returned. Otherwise, a new logger will be instantiated by the + parameter and linked with its existing + ancestors as well as children. + + + + + + Sends a logger creation event to all registered listeners + + The newly created logger + + Raises the logger creation event. + + + + + Updates all the parents of the specified logger + + The logger to update the parents for + + + This method loops through all the potential parents of + . There 3 possible cases: + + + + No entry for the potential parent of exists + + We create a ProvisionNode for this potential + parent and insert in that provision node. + + + + The entry is of type Logger for the potential parent. + + The entry is 's nearest existing parent. We + update 's parent field with this entry. We also break from + he loop because updating our parent's parent is our parent's + responsibility. + + + + The entry is of type ProvisionNode for this potential parent. + + We add to the list of children for this + potential parent. + + + + + + + + Replace a with a in the hierarchy. + + + + + + We update the links for all the children that placed themselves + in the provision node 'pn'. The second argument 'log' is a + reference for the newly created Logger, parent of all the + children in 'pn'. + + + We loop on all the children 'c' in 'pn'. + + + If the child 'c' has been already linked to a child of + 'log' then there is no need to update 'c'. + + + Otherwise, we set log's parent field to c's parent and set + c's parent field to log. + + + + + + Define or redefine a Level using the values in the argument + + the level values + + + Define or redefine a Level using the values in the argument + + + Supports setting levels via the configuration file. + + + + + + Set a Property using the values in the argument + + the property value + + + Set a Property using the values in the argument. + + + Supports setting property values via the configuration file. + + + + + + Event used to notify that a logger has been created. + + + + Event raised when a logger is created. + + + + + + Has no appender warning been emitted + + + + Flag to indicate if we have already issued a warning + about not having an appender warning. + + + + + + Get the root of this hierarchy + + + + Get the root of this hierarchy. + + + + + + Gets or sets the default instance. + + The default + + + The logger factory is used to create logger instances. + + + + + + A class to hold the value, name and display name for a level + + + + A class to hold the value, name and display name for a level + + + + + + Override Object.ToString to return sensible debug info + + string info about this object + + + + Value of the level + + + + If the value is not set (defaults to -1) the value will be looked + up for the current level with the same name. + + + + + + Name of the level + + + The name of the level + + + + The name of the level. + + + + + + Display name for the level + + + The display name of the level + + + + The display name of the level. + + + + + + A class to hold the key and data for a property set in the config file + + + + A class to hold the key and data for a property set in the config file + + + + + + Override Object.ToString to return sensible debug info + + string info about this object + + + + Property Key + + + Property Key + + + + Property Key. + + + + + + Property Value + + + Property Value + + + + Property Value. + + + + + + Used internally to accelerate hash table searches. + + + + Internal class used to improve performance of + string keyed hashtables. + + + The hashcode of the string is cached for reuse. + The string is stored as an interned value. + When comparing two objects for equality + the reference equality of the interned strings is compared. + + + Nicko Cadell + Gert Driesen + + + + Construct key with string name + + + + Initializes a new instance of the class + with the specified name. + + + Stores the hashcode of the string and interns + the string key to optimize comparisons. + + + The Compact Framework 1.0 the + method does not work. On the Compact Framework + the string keys are not interned nor are they + compared by reference. + + + The name of the logger. + + + + Returns a hash code for the current instance. + + A hash code for the current instance. + + + Returns the cached hashcode. + + + + + + Determines whether two instances + are equal. + + The to compare with the current . + + true if the specified is equal to the current ; otherwise, false. + + + + Compares the references of the interned strings. + + + + + + Provision nodes are used where no logger instance has been specified + + + + instances are used in the + when there is no specified + for that node. + + + A provision node holds a list of child loggers on behalf of + a logger that does not exist. + + + Nicko Cadell + Gert Driesen + + + + Create a new provision node with child node + + A child logger to add to this node. + + + Initializes a new instance of the class + with the specified child logger. + + + + + + The sits at the root of the logger hierarchy tree. + + + + The is a regular except + that it provides several guarantees. + + + First, it cannot be assigned a null + level. Second, since the root logger cannot have a parent, the + property always returns the value of the + level field without walking the hierarchy. + + + Nicko Cadell + Gert Driesen + + + + Construct a + + The level to assign to the root logger. + + + Initializes a new instance of the class with + the specified logging level. + + + The root logger names itself as "root". However, the root + logger cannot be retrieved by name. + + + + + + Gets the assigned level value without walking the logger hierarchy. + + The assigned level value without walking the logger hierarchy. + + + Because the root logger cannot have a parent and its level + must not be null this property just returns the + value of . + + + + + + Gets or sets the assigned for the root logger. + + + The of the root logger. + + + + Setting the level of the root logger to a null reference + may have catastrophic results. We prevent this here. + + + + + + Initializes the log4net environment using an XML DOM. + + + + Configures a using an XML DOM. + + + Nicko Cadell + Gert Driesen + + + + Construct the configurator for a hierarchy + + The hierarchy to build. + + + Initializes a new instance of the class + with the specified . + + + + + + Configure the hierarchy by parsing a DOM tree of XML elements. + + The root element to parse. + + + Configure the hierarchy by parsing a DOM tree of XML elements. + + + + + + Parse appenders by IDREF. + + The appender ref element. + The instance of the appender that the ref refers to. + + + Parse an XML element that represents an appender and return + the appender. + + + + + + Parses an appender element. + + The appender element. + The appender instance or null when parsing failed. + + + Parse an XML element that represents an appender and return + the appender instance. + + + + + + Parses a logger element. + + The logger element. + + + Parse an XML element that represents a logger. + + + + + + Parses the root logger element. + + The root element. + + + Parse an XML element that represents the root logger. + + + + + + Parses the children of a logger element. + + The category element. + The logger instance. + Flag to indicate if the logger is the root logger. + + + Parse the child elements of a <logger> element. + + + + + + Parses an object renderer. + + The renderer element. + + + Parse an XML element that represents a renderer. + + + + + + Parses a level element. + + The level element. + The logger object to set the level on. + Flag to indicate if the logger is the root logger. + + + Parse an XML element that represents a level. + + + + + + Sets a parameter on an object. + + The parameter element. + The object to set the parameter on. + + The parameter name must correspond to a writable property + on the object. The value of the parameter is a string, + therefore this function will attempt to set a string + property first. If unable to set a string property it + will inspect the property and its argument type. It will + attempt to call a static method called Parse on the + type of the property. This method will take a single + string argument and return a value that can be used to + set the property. + + + + + Test if an element has no attributes or child elements + + the element to inspect + true if the element has any attributes or child elements, false otherwise + + + + Test if a is constructible with Activator.CreateInstance. + + the type to inspect + true if the type is creatable using a default constructor, false otherwise + + + + Look for a method on the that matches the supplied + + the type that has the method + the name of the method + the method info found + + + The method must be a public instance method on the . + The method must be named or "Add" followed by . + The method must take a single parameter. + + + + + + Converts a string value to a target type. + + The type of object to convert the string to. + The string value to use as the value of the object. + + + An object of type with value or + null when the conversion could not be performed. + + + + + + Creates an object as specified in XML. + + The XML element that contains the definition of the object. + The object type to use if not explicitly specified. + The type that the returned object must be or must inherit from. + The object or null + + + Parse an XML element and create an object instance based on the configuration + data. + + + The type of the instance may be specified in the XML. If not + specified then the is used + as the type. However the type is specified it must support the + type. + + + + + + key: appenderName, value: appender. + + + + + The Hierarchy being configured. + + + + + Delegate used to handle logger repository shutdown event notifications + + The that is shutting down. + Empty event args + + + Delegate used to handle logger repository shutdown event notifications. + + + + + + Delegate used to handle logger repository configuration reset event notifications + + The that has had its configuration reset. + Empty event args + + + Delegate used to handle logger repository configuration reset event notifications. + + + + + + Delegate used to handle event notifications for logger repository configuration changes. + + The that has had its configuration changed. + Empty event arguments. + + + Delegate used to handle event notifications for logger repository configuration changes. + + + + + + Write the name of the current AppDomain to the output + + + + Write the name of the current AppDomain to the output writer + + + Nicko Cadell + + + + Write the name of the current AppDomain to the output + + the writer to write to + null, state is not set + + + Writes name of the current AppDomain to the output . + + + + + + Write the current date to the output + + + + Date pattern converter, uses a to format + the current date and time to the writer as a string. + + + The value of the determines + the formatting of the date. The following values are allowed: + + + Option value + Output + + + ISO8601 + + Uses the formatter. + Formats using the "yyyy-MM-dd HH:mm:ss,fff" pattern. + + + + DATE + + Uses the formatter. + Formats using the "dd MMM yyyy HH:mm:ss,fff" for example, "06 Nov 1994 15:49:37,459". + + + + ABSOLUTE + + Uses the formatter. + Formats using the "HH:mm:ss,fff" for example, "15:49:37,459". + + + + other + + Any other pattern string uses the formatter. + This formatter passes the pattern string to the + method. + For details on valid patterns see + DateTimeFormatInfo Class. + + + + + + The date and time is in the local time zone and is rendered in that zone. + To output the time in Universal time see . + + + Nicko Cadell + + + + The used to render the date to a string + + + + The used to render the date to a string + + + + + + Initialize the converter options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Write the current date to the output + + that will receive the formatted result. + null, state is not set + + + Pass the current date and time to the + for it to render it to the writer. + + + The date and time passed is in the local time zone. + + + + + + Write an environment variable to the output + + + + Write an environment variable to the output writer. + The value of the determines + the name of the variable to output. + + + Nicko Cadell + + + + Write an environment variable to the output + + the writer to write to + null, state is not set + + + Writes the environment variable to the output . + The name of the environment variable to output must be set + using the + property. + + + + + + Write the current thread identity to the output + + + + Write the current thread identity to the output writer + + + Nicko Cadell + + + + Write the current thread identity to the output + + the writer to write to + null, state is not set + + + Writes the current thread identity to the output . + + + + + + Pattern converter for literal string instances in the pattern + + + + Writes the literal string value specified in the + property to + the output. + + + Nicko Cadell + + + + Set the next converter in the chain + + The next pattern converter in the chain + The next pattern converter + + + Special case the building of the pattern converter chain + for instances. Two adjacent + literals in the pattern can be represented by a single combined + pattern converter. This implementation detects when a + is added to the chain + after this converter and combines its value with this converter's + literal value. + + + + + + Write the literal to the output + + the writer to write to + null, not set + + + Override the formatting behavior to ignore the FormattingInfo + because we have a literal instead. + + + Writes the value of + to the output . + + + + + + Convert this pattern into the rendered message + + that will receive the formatted result. + null, not set + + + This method is not used. + + + + + + Writes a newline to the output + + + + Writes the system dependent line terminator to the output. + This behavior can be overridden by setting the : + + + + Option Value + Output + + + DOS + DOS or Windows line terminator "\r\n" + + + UNIX + UNIX line terminator "\n" + + + + Nicko Cadell + + + + Initialize the converter + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Write the current process ID to the output + + + + Write the current process ID to the output writer + + + Nicko Cadell + + + + Write the current process ID to the output + + the writer to write to + null, state is not set + + + Write the current process ID to the output . + + + + + + Property pattern converter + + + + This pattern converter reads the thread and global properties. + The thread properties take priority over global properties. + See for details of the + thread properties. See for + details of the global properties. + + + If the is specified then that will be used to + lookup a single property. If no is specified + then all properties will be dumped as a list of key value pairs. + + + Nicko Cadell + + + + Write the property value to the output + + that will receive the formatted result. + null, state is not set + + + Writes out the value of a named property. The property name + should be set in the + property. + + + If the is set to null + then all the properties are written as key value pairs. + + + + + + A Pattern converter that generates a string of random characters + + + + The converter generates a string of random characters. By default + the string is length 4. This can be changed by setting the + to the string value of the length required. + + + The random characters in the string are limited to uppercase letters + and numbers only. + + + The random number generator used by this class is not cryptographically secure. + + + Nicko Cadell + + + + Shared random number generator + + + + + Length of random string to generate. Default length 4. + + + + + Initialize the converter options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Write a randoim string to the output + + the writer to write to + null, state is not set + + + Write a randoim string to the output . + + + + + + Write the current threads username to the output + + + + Write the current threads username to the output writer + + + Nicko Cadell + + + + Write the current threads username to the output + + the writer to write to + null, state is not set + + + Write the current threads username to the output . + + + + + + Write the UTC date time to the output + + + + Date pattern converter, uses a to format + the current date and time in Universal time. + + + See the for details on the date pattern syntax. + + + + Nicko Cadell + + + + Write the current date and time to the output + + that will receive the formatted result. + null, state is not set + + + Pass the current date and time to the + for it to render it to the writer. + + + The date is in Universal time when it is rendered. + + + + + + + Type converter for Boolean. + + + + Supports conversion from string to bool type. + + + + + + Nicko Cadell + Gert Driesen + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Returns true if the is + the type. + + + + + + Convert the source object to the type supported by this object + + the object to convert + the converted object + + + Uses the method to convert the + argument to a . + + + + The object cannot be converted to the + target type. To check for this condition use the + method. + + + + + Exception base type for conversion errors. + + + + This type extends . It + does not add any new functionality but does differentiate the + type of exception being thrown. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Constructor + + A message to include with the exception. + + + Initializes a new instance of the class + with the specified message. + + + + + + Constructor + + A message to include with the exception. + A nested exception to include. + + + Initializes a new instance of the class + with the specified message and inner exception. + + + + + + Serialization constructor + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + + + Initializes a new instance of the class + with serialized data. + + + + + + Creates a new instance of the class. + + The conversion destination type. + The value to convert. + An instance of the . + + + Creates a new instance of the class. + + + + + + Creates a new instance of the class. + + The conversion destination type. + The value to convert. + A nested exception to include. + An instance of the . + + + Creates a new instance of the class. + + + + + + Register of type converters for specific types. + + + + Maintains a registry of type converters used to convert between + types. + + + Use the and + methods to register new converters. + The and methods + lookup appropriate converters to use. + + + + + Nicko Cadell + Gert Driesen + + + + Private constructor + + + Initializes a new instance of the class. + + + + + Static constructor. + + + + This constructor defines the intrinsic type converters. + + + + + + Adds a converter for a specific type. + + The type being converted to. + The type converter to use to convert to the destination type. + + + Adds a converter instance for a specific type. + + + + + + Adds a converter for a specific type. + + The type being converted to. + The type of the type converter to use to convert to the destination type. + + + Adds a converter for a specific type. + + + + + + Gets the type converter to use to convert values to the destination type. + + The type being converted from. + The type being converted to. + + The type converter instance to use for type conversions or null + if no type converter is found. + + + + Gets the type converter to use to convert values to the destination type. + + + + + + Gets the type converter to use to convert values to the destination type. + + The type being converted to. + + The type converter instance to use for type conversions or null + if no type converter is found. + + + + Gets the type converter to use to convert values to the destination type. + + + + + + Lookups the type converter to use as specified by the attributes on the + destination type. + + The type being converted to. + + The type converter instance to use for type conversions or null + if no type converter is found. + + + + + Creates the instance of the type converter. + + The type of the type converter. + + The type converter instance to use for type conversions or null + if no type converter is found. + + + + The type specified for the type converter must implement + the or interfaces + and must have a public default (no argument) constructor. + + + + + + Mapping from to type converter. + + + + + Supports conversion from string to type. + + + + Supports conversion from string to type. + + + + + + Nicko Cadell + Gert Driesen + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Returns true if the is + the type. + + + + + + Overrides the ConvertFrom method of IConvertFrom. + + the object to convert to an encoding + the encoding + + + Uses the method to + convert the argument to an . + + + + The object cannot be converted to the + target type. To check for this condition use the + method. + + + + + Interface supported by type converters + + + + This interface supports conversion from a single type to arbitrary types. + See . + + + Nicko Cadell + + + + Returns whether this converter can convert the object to the specified type + + A Type that represents the type you want to convert to + true if the conversion is possible + + + Test if the type supported by this converter can be converted to the + . + + + + + + Converts the given value object to the specified type, using the arguments + + the object to convert + The Type to convert the value parameter to + the converted object + + + Converts the (which must be of the type supported + by this converter) to the specified.. + + + + + + Supports conversion from string to type. + + + + Supports conversion from string to type. + + + + + Nicko Cadell + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Returns true if the is + the type. + + + + + + Overrides the ConvertFrom method of IConvertFrom. + + the object to convert to an IPAddress + the IPAddress + + + Uses the method to convert the + argument to an . + If that fails then the string is resolved as a DNS hostname. + + + + The object cannot be converted to the + target type. To check for this condition use the + method. + + + + + Valid characters in an IPv4 or IPv6 address string. (Does not support subnets) + + + + + Supports conversion from string to type. + + + + Supports conversion from string to type. + + + The string is used as the + of the . + + + + + + Nicko Cadell + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Returns true if the is + the type. + + + + + + Overrides the ConvertFrom method of IConvertFrom. + + the object to convert to a PatternLayout + the PatternLayout + + + Creates and returns a new using + the as the + . + + + + The object cannot be converted to the + target type. To check for this condition use the + method. + + + + + Convert between string and + + + + Supports conversion from string to type, + and from a type to a string. + + + The string is used as the + of the . + + + + + + Nicko Cadell + + + + Can the target type be converted to the type supported by this object + + A that represents the type you want to convert to + true if the conversion is possible + + + Returns true if the is + assignable from a type. + + + + + + Converts the given value object to the specified type, using the arguments + + the object to convert + The Type to convert the value parameter to + the converted object + + + Uses the method to convert the + argument to a . + + + + The object cannot be converted to the + . To check for this condition use the + method. + + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Returns true if the is + the type. + + + + + + Overrides the ConvertFrom method of IConvertFrom. + + the object to convert to a PatternString + the PatternString + + + Creates and returns a new using + the as the + . + + + + The object cannot be converted to the + target type. To check for this condition use the + method. + + + + + Supports conversion from string to type. + + + + Supports conversion from string to type. + + + + + + Nicko Cadell + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Returns true if the is + the type. + + + + + + Overrides the ConvertFrom method of IConvertFrom. + + the object to convert to a Type + the Type + + + Uses the method to convert the + argument to a . + Additional effort is made to locate partially specified types + by searching the loaded assemblies. + + + + The object cannot be converted to the + target type. To check for this condition use the + method. + + + + + Attribute used to associate a type converter + + + + Class and Interface level attribute that specifies a type converter + to use with the associated type. + + + To associate a type converter with a target type apply a + TypeConverterAttribute to the target type. Specify the + type of the type converter on the attribute. + + + Nicko Cadell + Gert Driesen + + + + The string type name of the type converter + + + + + Default constructor + + + + Default constructor + + + + + + Create a new type converter attribute for the specified type name + + The string type name of the type converter + + + The type specified must implement the + or the interfaces. + + + + + + Create a new type converter attribute for the specified type + + The type of the type converter + + + The type specified must implement the + or the interfaces. + + + + + + The string type name of the type converter + + + The string type name of the type converter + + + + The type specified must implement the + or the interfaces. + + + + + + A straightforward implementation of the interface. + + + + This is the default implementation of the + interface. Implementors of the interface + should aggregate an instance of this type. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Append on on all attached appenders. + + The event being logged. + The number of appenders called. + + + Calls the method on all + attached appenders. + + + + + + Append on on all attached appenders. + + The array of events being logged. + The number of appenders called. + + + Calls the method on all + attached appenders. + + + + + + Calls the DoAppende method on the with + the objects supplied. + + The appender + The events + + + If the supports the + interface then the will be passed + through using that interface. Otherwise the + objects in the array will be passed one at a time. + + + + + + Attaches an appender. + + The appender to add. + + + If the appender is already in the list it won't be added again. + + + + + + Gets an attached appender with the specified name. + + The name of the appender to get. + + The appender with the name specified, or null if no appender with the + specified name is found. + + + + Lookup an attached appender by name. + + + + + + Removes all attached appenders. + + + + Removes and closes all attached appenders + + + + + + Removes the specified appender from the list of attached appenders. + + The appender to remove. + The appender removed from the list + + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + + Removes the appender with the specified name from the list of appenders. + + The name of the appender to remove. + The appender removed from the list + + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + + List of appenders + + + + + Array of appenders, used to cache the m_appenderList + + + + + Gets all attached appenders. + + + A collection of attached appenders, or null if there + are no attached appenders. + + + + The read only collection of all currently attached appenders. + + + + + + This class aggregates several PropertiesDictionary collections together. + + + + Provides a dictionary style lookup over an ordered list of + collections. + + + Nicko Cadell + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Add a Properties Dictionary to this composite collection + + the properties to add + + + Properties dictionaries added first take precedence over dictionaries added + later. + + + + + + Flatten this composite collection into a single properties dictionary + + the flattened dictionary + + + Reduces the collection of ordered dictionaries to a single dictionary + containing the resultant values for the keys. + + + + + + Gets the value of a property + + + The value for the property with the specified key + + + + Looks up the value for the specified. + The collections are searched + in the order in which they were added to this collection. The value + returned is the value held by the first collection that contains + the specified key. + + + If none of the collections contain the specified key then + null is returned. + + + + + + Base class for Context Properties implementations + + + + This class defines a basic property get set accessor + + + Nicko Cadell + + + + Gets or sets the value of a property + + + The value for the property with the specified key + + + + Gets or sets the value of a property + + + + + + Subclass of that maintains a count of + the number of bytes written. + + + + This writer counts the number of bytes written. + + + Nicko Cadell + Gert Driesen + + + + that does not leak exceptions + + + + does not throw exceptions when things go wrong. + Instead, it delegates error handling to its . + + + Nicko Cadell + Gert Driesen + + + + Adapter that extends and forwards all + messages to an instance of . + + + + Adapter that extends and forwards all + messages to an instance of . + + + Nicko Cadell + + + + The writer to forward messages to + + + + + Create an instance of that forwards all + messages to a . + + The to forward to + + + Create an instance of that forwards all + messages to a . + + + + + + Closes the writer and releases any system resources associated with the writer + + + + + + + + + Dispose this writer + + flag indicating if we are being disposed + + + Dispose this writer + + + + + + Flushes any buffered output + + + + Clears all buffers for the writer and causes any buffered data to be written + to the underlying device + + + + + + Writes a character to the wrapped TextWriter + + the value to write to the TextWriter + + + Writes a character to the wrapped TextWriter + + + + + + Writes a character buffer to the wrapped TextWriter + + the data buffer + the start index + the number of characters to write + + + Writes a character buffer to the wrapped TextWriter + + + + + + Writes a string to the wrapped TextWriter + + the value to write to the TextWriter + + + Writes a string to the wrapped TextWriter + + + + + + Gets or sets the underlying . + + + The underlying . + + + + Gets or sets the underlying . + + + + + + The Encoding in which the output is written + + + The + + + + The Encoding in which the output is written + + + + + + Gets an object that controls formatting + + + The format provider + + + + Gets an object that controls formatting + + + + + + Gets or sets the line terminator string used by the TextWriter + + + The line terminator to use + + + + Gets or sets the line terminator string used by the TextWriter + + + + + + Constructor + + the writer to actually write to + the error handler to report error to + + + Create a new QuietTextWriter using a writer and error handler + + + + + + Writes a character to the underlying writer + + the char to write + + + Writes a character to the underlying writer + + + + + + Writes a buffer to the underlying writer + + the buffer to write + the start index to write from + the number of characters to write + + + Writes a buffer to the underlying writer + + + + + + Writes a string to the output. + + The string data to write to the output. + + + Writes a string to the output. + + + + + + Closes the underlying output writer. + + + + Closes the underlying output writer. + + + + + + The error handler instance to pass all errors to + + + + + Flag to indicate if this writer is closed + + + + + Gets or sets the error handler that all errors are passed to. + + + The error handler that all errors are passed to. + + + + Gets or sets the error handler that all errors are passed to. + + + + + + Gets a value indicating whether this writer is closed. + + + true if this writer is closed, otherwise false. + + + + Gets a value indicating whether this writer is closed. + + + + + + Constructor + + The to actually write to. + The to report errors to. + + + Creates a new instance of the class + with the specified and . + + + + + + Writes a character to the underlying writer and counts the number of bytes written. + + the char to write + + + Overrides implementation of . Counts + the number of bytes written. + + + + + + Writes a buffer to the underlying writer and counts the number of bytes written. + + the buffer to write + the start index to write from + the number of characters to write + + + Overrides implementation of . Counts + the number of bytes written. + + + + + + Writes a string to the output and counts the number of bytes written. + + The string data to write to the output. + + + Overrides implementation of . Counts + the number of bytes written. + + + + + + Total number of bytes written. + + + + + Gets or sets the total number of bytes written. + + + The total number of bytes written. + + + + Gets or sets the total number of bytes written. + + + + + + A fixed size rolling buffer of logging events. + + + + An array backed fixed size leaky bucket. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + The maximum number of logging events in the buffer. + + + Initializes a new instance of the class with + the specified maximum number of buffered logging events. + + + The argument is not a positive integer. + + + + Appends a to the buffer. + + The event to append to the buffer. + The event discarded from the buffer, if the buffer is full, otherwise null. + + + Append an event to the buffer. If the buffer still contains free space then + null is returned. If the buffer is full then an event will be dropped + to make space for the new event, the event dropped is returned. + + + + + + Get and remove the oldest event in the buffer. + + The oldest logging event in the buffer + + + Gets the oldest (first) logging event in the buffer and removes it + from the buffer. + + + + + + Pops all the logging events from the buffer into an array. + + An array of all the logging events in the buffer. + + + Get all the events in the buffer and clear the buffer. + + + + + + Clear the buffer + + + + Clear the buffer of all events. The events in the buffer are lost. + + + + + + Gets the th oldest event currently in the buffer. + + The th oldest event currently in the buffer. + + + If is outside the range 0 to the number of events + currently in the buffer, then null is returned. + + + + + + Gets the maximum size of the buffer. + + The maximum size of the buffer. + + + Gets the maximum size of the buffer + + + + + + Gets the number of logging events in the buffer. + + The number of logging events in the buffer. + + + This number is guaranteed to be in the range 0 to + (inclusive). + + + + + + An always empty . + + + + A singleton implementation of the + interface that always represents an empty collection. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to enforce the singleton pattern. + + + + + + Copies the elements of the to an + , starting at a particular Array index. + + The one-dimensional + that is the destination of the elements copied from + . The Array must have zero-based + indexing. + The zero-based index in array at which + copying begins. + + + As the collection is empty no values are copied into the array. + + + + + + Returns an enumerator that can iterate through a collection. + + + An that can be used to + iterate through the collection. + + + + As the collection is empty a is returned. + + + + + + The singleton instance of the empty collection. + + + + + Gets the singleton instance of the empty collection. + + The singleton instance of the empty collection. + + + Gets the singleton instance of the empty collection. + + + + + + Gets a value indicating if access to the is synchronized (thread-safe). + + + true if access to the is synchronized (thread-safe); otherwise, false. + + + + For the this property is always true. + + + + + + Gets the number of elements contained in the . + + + The number of elements contained in the . + + + + As the collection is empty the is always 0. + + + + + + Gets an object that can be used to synchronize access to the . + + + An object that can be used to synchronize access to the . + + + + As the collection is empty and thread safe and synchronized this instance is also + the object. + + + + + + An always empty . + + + + A singleton implementation of the + interface that always represents an empty collection. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to enforce the singleton pattern. + + + + + + Copies the elements of the to an + , starting at a particular Array index. + + The one-dimensional + that is the destination of the elements copied from + . The Array must have zero-based + indexing. + The zero-based index in array at which + copying begins. + + + As the collection is empty no values are copied into the array. + + + + + + Returns an enumerator that can iterate through a collection. + + + An that can be used to + iterate through the collection. + + + + As the collection is empty a is returned. + + + + + + Adds an element with the provided key and value to the + . + + The to use as the key of the element to add. + The to use as the value of the element to add. + + + As the collection is empty no new values can be added. A + is thrown if this method is called. + + + This dictionary is always empty and cannot be modified. + + + + Removes all elements from the . + + + + As the collection is empty no values can be removed. A + is thrown if this method is called. + + + This dictionary is always empty and cannot be modified. + + + + Determines whether the contains an element + with the specified key. + + The key to locate in the . + false + + + As the collection is empty the method always returns false. + + + + + + Returns an enumerator that can iterate through a collection. + + + An that can be used to + iterate through the collection. + + + + As the collection is empty a is returned. + + + + + + Removes the element with the specified key from the . + + The key of the element to remove. + + + As the collection is empty no values can be removed. A + is thrown if this method is called. + + + This dictionary is always empty and cannot be modified. + + + + The singleton instance of the empty dictionary. + + + + + Gets the singleton instance of the . + + The singleton instance of the . + + + Gets the singleton instance of the . + + + + + + Gets a value indicating if access to the is synchronized (thread-safe). + + + true if access to the is synchronized (thread-safe); otherwise, false. + + + + For the this property is always true. + + + + + + Gets the number of elements contained in the + + + The number of elements contained in the . + + + + As the collection is empty the is always 0. + + + + + + Gets an object that can be used to synchronize access to the . + + + An object that can be used to synchronize access to the . + + + + As the collection is empty and thread safe and synchronized this instance is also + the object. + + + + + + Gets a value indicating whether the has a fixed size. + + true + + + As the collection is empty always returns true. + + + + + + Gets a value indicating whether the is read-only. + + true + + + As the collection is empty always returns true. + + + + + + Gets an containing the keys of the . + + An containing the keys of the . + + + As the collection is empty a is returned. + + + + + + Gets an containing the values of the . + + An containing the values of the . + + + As the collection is empty a is returned. + + + + + + Gets or sets the element with the specified key. + + The key of the element to get or set. + null + + + As the collection is empty no values can be looked up or stored. + If the index getter is called then null is returned. + A is thrown if the setter is called. + + + This dictionary is always empty and cannot be modified. + + + + Contain the information obtained when parsing formatting modifiers + in conversion modifiers. + + + + Holds the formatting information extracted from the format string by + the . This is used by the + objects when rendering the output. + + + Nicko Cadell + Gert Driesen + + + + Defaut Constructor + + + + Initializes a new instance of the class. + + + + + + Constructor + + + + Initializes a new instance of the class + with the specified parameters. + + + + + + Gets or sets the minimum value. + + + The minimum value. + + + + Gets or sets the minimum value. + + + + + + Gets or sets the maximum value. + + + The maximum value. + + + + Gets or sets the maximum value. + + + + + + Gets or sets a flag indicating whether left align is enabled + or not. + + + A flag indicating whether left align is enabled or not. + + + + Gets or sets a flag indicating whether left align is enabled or not. + + + + + + Implementation of Properties collection for the + + + + This class implements a properties collection that is thread safe and supports both + storing properties and capturing a read only copy of the current propertied. + + + This class is optimized to the scenario where the properties are read frequently + and are modified infrequently. + + + Nicko Cadell + + + + The read only copy of the properties. + + + + This variable is declared volatile to prevent the compiler and JIT from + reordering reads and writes of this thread performed on different threads. + + + + + + Lock object used to synchronize updates within this instance + + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Remove a property from the global context + + the key for the entry to remove + + + Removing an entry from the global context properties is relatively expensive compared + with reading a value. + + + + + + Clear the global context properties + + + + + Get a readonly immutable copy of the properties + + the current global context properties + + + This implementation is fast because the GlobalContextProperties class + stores a readonly copy of the properties. + + + + + + Gets or sets the value of a property + + + The value for the property with the specified key + + + + Reading the value for a key is faster than setting the value. + When the value is written a new read only copy of + the properties is created. + + + + + + Manages a mapping from levels to + + + + Manages an ordered mapping from instances + to subclasses. + + + Nicko Cadell + + + + Default constructor + + + + Initialise a new instance of . + + + + + + Add a to this mapping + + the entry to add + + + If a has previously been added + for the same then that entry will be + overwritten. + + + + + + Lookup the mapping for the specified level + + the level to lookup + the for the level or null if no mapping found + + + Lookup the value for the specified level. Finds the nearest + mapping value for the level that is equal to or less than the + specified. + + + If no mapping could be found then null is returned. + + + + + + Initialize options + + + + Caches the sorted list of in an array + + + + + + Implementation of Properties collection for the + + + + Class implements a collection of properties that is specific to each thread. + The class is not synchronized as each thread has its own . + + + Nicko Cadell + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Remove a property + + the key for the entry to remove + + + Remove the value for the specified from the context. + + + + + + Clear all the context properties + + + + Clear all the context properties + + + + + + Get the PropertiesDictionary stored in the LocalDataStoreSlot for this thread. + + create the dictionary if it does not exist, otherwise return null if is does not exist + the properties for this thread + + + The collection returned is only to be used on the calling thread. If the + caller needs to share the collection between different threads then the + caller must clone the collection before doings so. + + + + + + Gets or sets the value of a property + + + The value for the property with the specified key + + + + Get or set the property value for the specified. + + + + + + Outputs log statements from within the log4net assembly. + + + + Log4net components cannot make log4net logging calls. However, it is + sometimes useful for the user to learn about what log4net is + doing. + + + All log4net internal debug calls go to the standard output stream + whereas internal error messages are sent to the standard error output + stream. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to prevent instantiation of this class. + + + + + + Static constructor that initializes logging by reading + settings from the application configuration file. + + + + The log4net.Internal.Debug application setting + controls internal debugging. This setting should be set + to true to enable debugging. + + + The log4net.Internal.Quiet application setting + suppresses all internal logging including error messages. + This setting should be set to true to enable message + suppression. + + + + + + Writes log4net internal debug messages to the + standard output stream. + + The message to log. + + + All internal debug messages are prepended with + the string "log4net: ". + + + + + + Writes log4net internal debug messages to the + standard output stream. + + The message to log. + An exception to log. + + + All internal debug messages are prepended with + the string "log4net: ". + + + + + + Writes log4net internal warning messages to the + standard error stream. + + The message to log. + + + All internal warning messages are prepended with + the string "log4net:WARN ". + + + + + + Writes log4net internal warning messages to the + standard error stream. + + The message to log. + An exception to log. + + + All internal warning messages are prepended with + the string "log4net:WARN ". + + + + + + Writes log4net internal error messages to the + standard error stream. + + The message to log. + + + All internal error messages are prepended with + the string "log4net:ERROR ". + + + + + + Writes log4net internal error messages to the + standard error stream. + + The message to log. + An exception to log. + + + All internal debug messages are prepended with + the string "log4net:ERROR ". + + + + + + Writes output to the standard output stream. + + The message to log. + + + Writes to both Console.Out and System.Diagnostics.Trace. + Note that the System.Diagnostics.Trace is not supported + on the Compact Framework. + + + If the AppDomain is not configured with a config file then + the call to System.Diagnostics.Trace may fail. This is only + an issue if you are programmatically creating your own AppDomains. + + + + + + Writes output to the standard error stream. + + The message to log. + + + Writes to both Console.Error and System.Diagnostics.Trace. + Note that the System.Diagnostics.Trace is not supported + on the Compact Framework. + + + If the AppDomain is not configured with a config file then + the call to System.Diagnostics.Trace may fail. This is only + an issue if you are programmatically creating your own AppDomains. + + + + + + Default debug level + + + + + In quietMode not even errors generate any output. + + + + + Gets or sets a value indicating whether log4net internal logging + is enabled or disabled. + + + true if log4net internal logging is enabled, otherwise + false. + + + + When set to true, internal debug level logging will be + displayed. + + + This value can be set by setting the application setting + log4net.Internal.Debug in the application configuration + file. + + + The default value is false, i.e. debugging is + disabled. + + + + + The following example enables internal debugging using the + application configuration file : + + + + + + + + + + + + + Gets or sets a value indicating whether log4net should generate no output + from internal logging, not even for errors. + + + true if log4net should generate no output at all from internal + logging, otherwise false. + + + + When set to true will cause internal logging at all levels to be + suppressed. This means that no warning or error reports will be logged. + This option overrides the setting and + disables all debug also. + + This value can be set by setting the application setting + log4net.Internal.Quiet in the application configuration file. + + + The default value is false, i.e. internal logging is not + disabled. + + + + The following example disables internal logging using the + application configuration file : + + + + + + + + + + + + Test if LogLog.Debug is enabled for output. + + + true if Debug is enabled + + + + Test if LogLog.Debug is enabled for output. + + + + + + Test if LogLog.Warn is enabled for output. + + + true if Warn is enabled + + + + Test if LogLog.Warn is enabled for output. + + + + + + Test if LogLog.Error is enabled for output. + + + true if Error is enabled + + + + Test if LogLog.Error is enabled for output. + + + + + + Represents a native error code and message. + + + + Represents a Win32 platform native error. + + + Nicko Cadell + Gert Driesen + + + + Create an instance of the class with the specified + error number and message. + + The number of the native error. + The message of the native error. + + + Create an instance of the class with the specified + error number and message. + + + + + + Create a new instance of the class for the last Windows error. + + + An instance of the class for the last windows error. + + + + The message for the error number is lookup up using the + native Win32 FormatMessage function. + + + + + + Create a new instance of the class. + + the error number for the native error + + An instance of the class for the specified + error number. + + + + The message for the specified error number is lookup up using the + native Win32 FormatMessage function. + + + + + + Retrieves the message corresponding with a Win32 message identifier. + + Message identifier for the requested message. + + The message corresponding with the specified message identifier. + + + + The message will be searched for in system message-table resource(s) + using the native FormatMessage function. + + + + + + Return error information string + + error information string + + + Return error information string + + + + + + Formats a message string. + + Formatting options, and how to interpret the parameter. + Location of the message definition. + Message identifier for the requested message. + Language identifier for the requested message. + If includes FORMAT_MESSAGE_ALLOCATE_BUFFER, the function allocates a buffer using the LocalAlloc function, and places the pointer to the buffer at the address specified in . + If the FORMAT_MESSAGE_ALLOCATE_BUFFER flag is not set, this parameter specifies the maximum number of TCHARs that can be stored in the output buffer. If FORMAT_MESSAGE_ALLOCATE_BUFFER is set, this parameter specifies the minimum number of TCHARs to allocate for an output buffer. + Pointer to an array of values that are used as insert values in the formatted message. + + + The function requires a message definition as input. The message definition can come from a + buffer passed into the function. It can come from a message table resource in an + already-loaded module. Or the caller can ask the function to search the system's message + table resource(s) for the message definition. The function finds the message definition + in a message table resource based on a message identifier and a language identifier. + The function copies the formatted message text to an output buffer, processing any embedded + insert sequences if requested. + + + To prevent the usage of unsafe code, this stub does not support inserting values in the formatted message. + + + + + If the function succeeds, the return value is the number of TCHARs stored in the output + buffer, excluding the terminating null character. + + + If the function fails, the return value is zero. To get extended error information, + call . + + + + + + Gets the number of the native error. + + + The number of the native error. + + + + Gets the number of the native error. + + + + + + Gets the message of the native error. + + + The message of the native error. + + + + + Gets the message of the native error. + + + + + An always empty . + + + + A singleton implementation of the over a collection + that is empty and not modifiable. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to enforce the singleton pattern. + + + + + + Test if the enumerator can advance, if so advance. + + false as the cannot advance. + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will always return false. + + + + + + Resets the enumerator back to the start. + + + + As the enumerator is over an empty collection does nothing. + + + + + + The singleton instance of the . + + + + + Gets the singleton instance of the . + + The singleton instance of the . + + + Gets the singleton instance of the . + + + + + + Gets the current object from the enumerator. + + + Throws an because the + never has a current value. + + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will throw an . + + + The collection is empty and + cannot be positioned over a valid location. + + + + Gets the current key from the enumerator. + + + Throws an exception because the + never has a current value. + + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will throw an . + + + The collection is empty and + cannot be positioned over a valid location. + + + + Gets the current value from the enumerator. + + The current value from the enumerator. + + Throws an because the + never has a current value. + + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will throw an . + + + The collection is empty and + cannot be positioned over a valid location. + + + + Gets the current entry from the enumerator. + + + Throws an because the + never has a current entry. + + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will throw an . + + + The collection is empty and + cannot be positioned over a valid location. + + + + An always empty . + + + + A singleton implementation of the over a collection + that is empty and not modifiable. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to enforce the singleton pattern. + + + + + + Test if the enumerator can advance, if so advance + + false as the cannot advance. + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will always return false. + + + + + + Resets the enumerator back to the start. + + + + As the enumerator is over an empty collection does nothing. + + + + + + The singleton instance of the . + + + + + Get the singleton instance of the . + + The singleton instance of the . + + + Gets the singleton instance of the . + + + + + + Gets the current object from the enumerator. + + + Throws an because the + never has a current value. + + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will throw an . + + + The collection is empty and + cannot be positioned over a valid location. + + + + A SecurityContext used when a SecurityContext is not required + + + + The is a no-op implementation of the + base class. It is used where a + is required but one has not been provided. + + + Nicko Cadell + + + + Singleton instance of + + + + Singleton instance of + + + + + + Private constructor + + + + Private constructor for singleton pattern. + + + + + + Impersonate this SecurityContext + + State supplied by the caller + null + + + No impersonation is done and null is always returned. + + + + + + Implements log4net's default error handling policy which consists + of emitting a message for the first error in an appender and + ignoring all subsequent errors. + + + + The error message is printed on the standard error output stream. + + + This policy aims at protecting an otherwise working application + from being flooded with error messages when logging fails. + + + Nicko Cadell + Gert Driesen + + + + Default Constructor + + + + Initializes a new instance of the class. + + + + + + Constructor + + The prefix to use for each message. + + + Initializes a new instance of the class + with the specified prefix. + + + + + + Log an Error + + The error message. + The exception. + The internal error code. + + + Prints the message and the stack trace of the exception on the standard + error output stream. + + + + + + Log an Error + + The error message. + The exception. + + + Prints the message and the stack trace of the exception on the standard + error output stream. + + + + + + Log an error + + The error message. + + + Print a the error message passed as parameter on the standard + error output stream. + + + + + + Flag to indicate if it is the first error + + + + + String to prefix each message with + + + + + Is error logging enabled + + + + Is error logging enabled. Logging is only enabled for the + first error delivered to the . + + + + + + A convenience class to convert property values to specific types. + + + + Utility functions for converting types and parsing values. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to prevent instantiation of this class. + + + + + + Converts a string to a value. + + String to convert. + The default value. + The value of . + + + If is "true", then true is returned. + If is "false", then false is returned. + Otherwise, is returned. + + + + + + Parses a file size into a number. + + String to parse. + The default value. + The value of . + + + Parses a file size of the form: number[KB|MB|GB] into a + long value. It is scaled with the appropriate multiplier. + + + is returned when + cannot be converted to a value. + + + + + + Converts a string to an object. + + The target type to convert to. + The string to convert to an object. + + The object converted from a string or null when the + conversion failed. + + + + Converts a string to an object. Uses the converter registry to try + to convert the string value into the specified target type. + + + + + + Checks if there is an appropriate type conversion from the source type to the target type. + + The type to convert from. + The type to convert to. + true if there is a conversion from the source type to the target type. + + Checks if there is an appropriate type conversion from the source type to the target type. + + + + + + + Converts an object to the target type. + + The object to convert to the target type. + The type to convert to. + The converted object. + + + Converts an object to the target type. + + + + + + Instantiates an object given a class name. + + The fully qualified class name of the object to instantiate. + The class to which the new object should belong. + The object to return in case of non-fulfillment. + + An instance of the or + if the object could not be instantiated. + + + + Checks that the is a subclass of + . If that test fails or the object could + not be instantiated, then is returned. + + + + + + Performs variable substitution in string from the + values of keys found in . + + The string on which variable substitution is performed. + The dictionary to use to lookup variables. + The result of the substitutions. + + + The variable substitution delimiters are ${ and }. + + + For example, if props contains key=value, then the call + + + + string s = OptionConverter.SubstituteVariables("Value of key is ${key}."); + + + + will set the variable s to "Value of key is value.". + + + If no value could be found for the specified key, then substitution + defaults to an empty string. + + + For example, if system properties contains no value for the key + "nonExistentKey", then the call + + + + string s = OptionConverter.SubstituteVariables("Value of nonExistentKey is [${nonExistentKey}]"); + + + + will set s to "Value of nonExistentKey is []". + + + An Exception is thrown if contains a start + delimiter "${" which is not balanced by a stop delimiter "}". + + + + + + Converts the string representation of the name or numeric value of one or + more enumerated constants to an equivalent enumerated object. + + The type to convert to. + The enum string value. + If true, ignore case; otherwise, regard case. + An object of type whose value is represented by . + + + + Most of the work of the class + is delegated to the PatternParser class. + + + + The PatternParser processes a pattern string and + returns a chain of objects. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + The pattern to parse. + + + Initializes a new instance of the class + with the specified pattern string. + + + + + + Parses the pattern into a chain of pattern converters. + + The head of a chain of pattern converters. + + + Parses the pattern into a chain of pattern converters. + + + + + + Build the unified cache of converters from the static and instance maps + + the list of all the converter names + + + Build the unified cache of converters from the static and instance maps + + + + + + Internal method to parse the specified pattern to find specified matches + + the pattern to parse + the converter names to match in the pattern + + + The matches param must be sorted such that longer strings come before shorter ones. + + + + + + Process a parsed literal + + the literal text + + + + Process a parsed converter pattern + + the name of the converter + the optional option for the converter + the formatting info for the converter + + + + Resets the internal state of the parser and adds the specified pattern converter + to the chain. + + The pattern converter to add. + + + + The first pattern converter in the chain + + + + + the last pattern converter in the chain + + + + + The pattern + + + + + Internal map of converter identifiers to converter types + + + + This map overrides the static s_globalRulesRegistry map. + + + + + + Get the converter registry used by this parser + + + The converter registry used by this parser + + + + Get the converter registry used by this parser + + + + + + Sort strings by length + + + + that orders strings by string length. + The longest strings are placed first + + + + + + This class implements a patterned string. + + + + This string has embedded patterns that are resolved and expanded + when the string is formatted. + + + This class functions similarly to the + in that it accepts a pattern and renders it to a string. Unlike the + however the PatternString + does not render the properties of a specific but + of the process in general. + + + The recognized conversion pattern names are: + + + + Conversion Pattern Name + Effect + + + appdomain + + + Used to output the friendly name of the current AppDomain. + + + + + date + + + Used to output the date of the logging event in the local time zone. + To output the date in universal time use the %utcdate pattern. + The date conversion + specifier may be followed by a date format specifier enclosed + between braces. For example, %date{HH:mm:ss,fff} or + %date{dd MMM yyyy HH:mm:ss,fff}. If no date format specifier is + given then ISO8601 format is + assumed (). + + + The date format specifier admits the same syntax as the + time pattern string of the . + + + For better results it is recommended to use the log4net date + formatters. These can be specified using one of the strings + "ABSOLUTE", "DATE" and "ISO8601" for specifying + , + and respectively + . For example, + %date{ISO8601} or %date{ABSOLUTE}. + + + These dedicated date formatters perform significantly + better than . + + + + + env + + + Used to output the a specific environment variable. The key to + lookup must be specified within braces and directly following the + pattern specifier, e.g. %env{COMPUTERNAME} would include the value + of the COMPUTERNAME environment variable. + + + The env pattern is not supported on the .NET Compact Framework. + + + + + identity + + + Used to output the user name for the currently active user + (Principal.Identity.Name). + + + + + newline + + + Outputs the platform dependent line separator character or + characters. + + + This conversion pattern name offers the same performance as using + non-portable line separator strings such as "\n", or "\r\n". + Thus, it is the preferred way of specifying a line separator. + + + + + processid + + + Used to output the system process ID for the current process. + + + + + property + + + Used to output a specific context property. The key to + lookup must be specified within braces and directly following the + pattern specifier, e.g. %property{user} would include the value + from the property that is keyed by the string 'user'. Each property value + that is to be included in the log must be specified separately. + Properties are stored in logging contexts. By default + the log4net:HostName property is set to the name of machine on + which the event was originally logged. + + + If no key is specified, e.g. %property then all the keys and their + values are printed in a comma separated list. + + + The properties of an event are combined from a number of different + contexts. These are listed below in the order in which they are searched. + + + + the thread properties + + The that are set on the current + thread. These properties are shared by all events logged on this thread. + + + + the global properties + + The that are set globally. These + properties are shared by all the threads in the AppDomain. + + + + + + + random + + + Used to output a random string of characters. The string is made up of + uppercase letters and numbers. By default the string is 4 characters long. + The length of the string can be specified within braces directly following the + pattern specifier, e.g. %random{8} would output an 8 character string. + + + + + username + + + Used to output the WindowsIdentity for the currently + active user. + + + + + utcdate + + + Used to output the date of the logging event in universal time. + The date conversion + specifier may be followed by a date format specifier enclosed + between braces. For example, %utcdate{HH:mm:ss,fff} or + %utcdate{dd MMM yyyy HH:mm:ss,fff}. If no date format specifier is + given then ISO8601 format is + assumed (). + + + The date format specifier admits the same syntax as the + time pattern string of the . + + + For better results it is recommended to use the log4net date + formatters. These can be specified using one of the strings + "ABSOLUTE", "DATE" and "ISO8601" for specifying + , + and respectively + . For example, + %utcdate{ISO8601} or %utcdate{ABSOLUTE}. + + + These dedicated date formatters perform significantly + better than . + + + + + % + + + The sequence %% outputs a single percent sign. + + + + + + Additional pattern converters may be registered with a specific + instance using or + . + + + See the for details on the + format modifiers supported by the patterns. + + + Nicko Cadell + + + + Internal map of converter identifiers to converter types. + + + + + the pattern + + + + + the head of the pattern converter chain + + + + + patterns defined on this PatternString only + + + + + Initialize the global registry + + + + + Default constructor + + + + Initialize a new instance of + + + + + + Constructs a PatternString + + The pattern to use with this PatternString + + + Initialize a new instance of with the pattern specified. + + + + + + Initialize object options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Create the used to parse the pattern + + the pattern to parse + The + + + Returns PatternParser used to parse the conversion string. Subclasses + may override this to return a subclass of PatternParser which recognize + custom conversion pattern name. + + + + + + Produces a formatted string as specified by the conversion pattern. + + The TextWriter to write the formatted event to + + + Format the pattern to the . + + + + + + Format the pattern as a string + + the pattern formatted as a string + + + Format the pattern to a string. + + + + + + Add a converter to this PatternString + + the converter info + + + This version of the method is used by the configurator. + Programmatic users should use the alternative method. + + + + + + Add a converter to this PatternString + + the name of the conversion pattern for this converter + the type of the converter + + + Add a converter to this PatternString + + + + + + Gets or sets the pattern formatting string + + + The pattern formatting string + + + + The ConversionPattern option. This is the string which + controls formatting and consists of a mix of literal content and + conversion specifiers. + + + + + + Wrapper class used to map converter names to converter types + + + + Wrapper class used to map converter names to converter types + + + + + + default constructor + + + + + Gets or sets the name of the conversion pattern + + + The name of the conversion pattern + + + + Gets or sets the name of the conversion pattern + + + + + + Gets or sets the type of the converter + + + The type of the converter + + + + Gets or sets the type of the converter + + + + + + String keyed object map. + + + + While this collection is serializable only member + objects that are serializable will + be serialized along with this collection. + + + Nicko Cadell + Gert Driesen + + + + String keyed object map that is read only. + + + + This collection is readonly and cannot be modified. + + + While this collection is serializable only member + objects that are serializable will + be serialized along with this collection. + + + Nicko Cadell + Gert Driesen + + + + The Hashtable used to store the properties data + + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Copy Constructor + + properties to copy + + + Initializes a new instance of the class. + + + + + + Deserialization constructor + + The that holds the serialized object data. + The that contains contextual information about the source or destination. + + + Initializes a new instance of the class + with serialized data. + + + + + + Gets the key names. + + An array of all the keys. + + + Gets the key names. + + + + + + Test if the dictionary contains a specified key + + the key to look for + true if the dictionary contains the specified key + + + Test if the dictionary contains a specified key + + + + + + Serializes this object into the provided. + + The to populate with data. + The destination for this serialization. + + + Serializes this object into the provided. + + + + + + See + + + + + See + + + + + + See + + + + + + + Remove all properties from the properties collection + + + + + See + + + + + + + See + + + + + + + See + + + + + Gets or sets the value of the property with the specified key. + + + The value of the property with the specified key. + + The key of the property to get or set. + + + The property value will only be serialized if it is serializable. + If it cannot be serialized it will be silently ignored if + a serialization operation is performed. + + + + + + The hashtable used to store the properties + + + The internal collection used to store the properties + + + + The hashtable used to store the properties + + + + + + See + + + + + See + + + + + See + + + + + See + + + + + See + + + + + See + + + + + The number of properties in this collection + + + + + See + + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Constructor + + properties to copy + + + Initializes a new instance of the class. + + + + + + Initializes a new instance of the class + with serialized data. + + The that holds the serialized object data. + The that contains contextual information about the source or destination. + + + Because this class is sealed the serialization constructor is private. + + + + + + Remove the entry with the specified key from this dictionary + + the key for the entry to remove + + + Remove the entry with the specified key from this dictionary + + + + + + See + + an enumerator + + + Returns a over the contest of this collection. + + + + + + See + + the key to remove + + + Remove the entry with the specified key from this dictionary + + + + + + See + + the key to lookup in the collection + true if the collection contains the specified key + + + Test if this collection contains a specified key. + + + + + + Remove all properties from the properties collection + + + + Remove all properties from the properties collection + + + + + + See + + the key + the value to store for the key + + + Store a value for the specified . + + + Thrown if the is not a string + + + + See + + + + + + + See + + + + + Gets or sets the value of the property with the specified key. + + + The value of the property with the specified key. + + The key of the property to get or set. + + + The property value will only be serialized if it is serializable. + If it cannot be serialized it will be silently ignored if + a serialization operation is performed. + + + + + + See + + + false + + + + This collection is modifiable. This property always + returns false. + + + + + + See + + + The value for the key specified. + + + + Get or set a value for the specified . + + + Thrown if the is not a string + + + + See + + + + + See + + + + + See + + + + + See + + + + + See + + + + + A that ignores the message + + + + This writer is used in special cases where it is necessary + to protect a writer from being closed by a client. + + + Nicko Cadell + + + + Constructor + + the writer to actually write to + + + Create a new ProtectCloseTextWriter using a writer + + + + + + Attach this instance to a different underlying + + the writer to attach to + + + Attach this instance to a different underlying + + + + + + Does not close the underlying output writer. + + + + Does not close the underlying output writer. + This method does nothing. + + + + + + Defines a lock that supports single writers and multiple readers + + + + ReaderWriterLock is used to synchronize access to a resource. + At any given time, it allows either concurrent read access for + multiple threads, or write access for a single thread. In a + situation where a resource is changed infrequently, a + ReaderWriterLock provides better throughput than a simple + one-at-a-time lock, such as . + + + If a platform does not support a System.Threading.ReaderWriterLock + implementation then all readers and writers are serialized. Therefore + the caller must not rely on multiple simultaneous readers. + + + Nicko Cadell + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Acquires a reader lock + + + + blocks if a different thread has the writer + lock, or if at least one thread is waiting for the writer lock. + + + + + + Decrements the lock count + + + + decrements the lock count. When the count + reaches zero, the lock is released. + + + + + + Acquires the writer lock + + + + This method blocks if another thread has a reader lock or writer lock. + + + + + + Decrements the lock count on the writer lock + + + + ReleaseWriterLock decrements the writer lock count. + When the count reaches zero, the writer lock is released. + + + + + + A that can be and reused + + + + A that can be and reused. + This uses a single buffer for string operations. + + + Nicko Cadell + + + + Create an instance of + + the format provider to use + + + Create an instance of + + + + + + Override Dispose to prevent closing of writer + + flag + + + Override Dispose to prevent closing of writer + + + + + + Reset this string writer so that it can be reused. + + the maximum buffer capacity before it is trimmed + the default size to make the buffer + + + Reset this string writer so that it can be reused. + The internal buffers are cleared and reset. + + + + + + Utility class for system specific information. + + + + Utility class of static methods for system specific information. + + + Nicko Cadell + Gert Driesen + Alexey Solofnenko + + + + Private constructor to prevent instances. + + + + Only static methods are exposed from this type. + + + + + + Initialize default values for private static fields. + + + + Only static methods are exposed from this type. + + + + + + Gets the assembly location path for the specified assembly. + + The assembly to get the location for. + The location of the assembly. + + + This method does not guarantee to return the correct path + to the assembly. If only tries to give an indication as to + where the assembly was loaded from. + + + + + + Gets the fully qualified name of the , including + the name of the assembly from which the was + loaded. + + The to get the fully qualified name for. + The fully qualified name for the . + + + This is equivalent to the Type.AssemblyQualifiedName property, + but this method works on the .NET Compact Framework 1.0 as well as + the full .NET runtime. + + + + + + Gets the short name of the . + + The to get the name for. + The short name of the . + + + The short name of the assembly is the + without the version, culture, or public key. i.e. it is just the + assembly's file name without the extension. + + + Use this rather than Assembly.GetName().Name because that + is not available on the Compact Framework. + + + Because of a FileIOPermission security demand we cannot do + the obvious Assembly.GetName().Name. We are allowed to get + the of the assembly so we + start from there and strip out just the assembly name. + + + + + + Gets the file name portion of the , including the extension. + + The to get the file name for. + The file name of the assembly. + + + Gets the file name portion of the , including the extension. + + + + + + Loads the type specified in the type string. + + A sibling type to use to load the type. + The name of the type to load. + Flag set to true to throw an exception if the type cannot be loaded. + true to ignore the case of the type name; otherwise, false + The type loaded or null if it could not be loaded. + + + If the type name is fully qualified, i.e. if contains an assembly name in + the type name, the type will be loaded from the system using + . + + + If the type name is not fully qualified, it will be loaded from the assembly + containing the specified relative type. If the type is not found in the assembly + then all the loaded assemblies will be searched for the type. + + + + + + Loads the type specified in the type string. + + The name of the type to load. + Flag set to true to throw an exception if the type cannot be loaded. + true to ignore the case of the type name; otherwise, false + The type loaded or null if it could not be loaded. + + + If the type name is fully qualified, i.e. if contains an assembly name in + the type name, the type will be loaded from the system using + . + + + If the type name is not fully qualified it will be loaded from the + assembly that is directly calling this method. If the type is not found + in the assembly then all the loaded assemblies will be searched for the type. + + + + + + Loads the type specified in the type string. + + An assembly to load the type from. + The name of the type to load. + Flag set to true to throw an exception if the type cannot be loaded. + true to ignore the case of the type name; otherwise, false + The type loaded or null if it could not be loaded. + + + If the type name is fully qualified, i.e. if contains an assembly name in + the type name, the type will be loaded from the system using + . + + + If the type name is not fully qualified it will be loaded from the specified + assembly. If the type is not found in the assembly then all the loaded assemblies + will be searched for the type. + + + + + + Generate a new guid + + A new Guid + + + Generate a new guid + + + + + + Create an + + The name of the parameter that caused the exception + The value of the argument that causes this exception + The message that describes the error + the ArgumentOutOfRangeException object + + + Create a new instance of the class + with a specified error message, the parameter name, and the value + of the argument. + + + The Compact Framework does not support the 3 parameter constructor for the + type. This method provides an + implementation that works for all platforms. + + + + + + Parse a string into an value + + the string to parse + out param where the parsed value is placed + true if the string was able to be parsed into an integer + + + Attempts to parse the string into an integer. If the string cannot + be parsed then this method returns false. The method does not throw an exception. + + + + + + Parse a string into an value + + the string to parse + out param where the parsed value is placed + true if the string was able to be parsed into an integer + + + Attempts to parse the string into an integer. If the string cannot + be parsed then this method returns false. The method does not throw an exception. + + + + + + Lookup an application setting + + the application settings key to lookup + the value for the key, or null + + + Configuration APIs are not supported under the Compact Framework + + + + + + Convert a path into a fully qualified local file path. + + The path to convert. + The fully qualified path. + + + Converts the path specified to a fully + qualified path. If the path is relative it is + taken as relative from the application base + directory. + + + The path specified must be a local file path, a URI is not supported. + + + + + + Creates a new case-insensitive instance of the class with the default initial capacity. + + A new case-insensitive instance of the class with the default initial capacity + + + The new Hashtable instance uses the default load factor, the CaseInsensitiveHashCodeProvider, and the CaseInsensitiveComparer. + + + + + + Gets an empty array of types. + + + + The Type.EmptyTypes field is not available on + the .NET Compact Framework 1.0. + + + + + + Cache the host name for the current machine + + + + + Cache the application friendly name + + + + + Text to output when a null is encountered. + + + + + Text to output when an unsupported feature is requested. + + + + + Start time for the current process. + + + + + Gets the system dependent line terminator. + + + The system dependent line terminator. + + + + Gets the system dependent line terminator. + + + + + + Gets the base directory for this . + + The base directory path for the current . + + + Gets the base directory for this . + + + The value returned may be either a local file path or a URI. + + + + + + Gets the path to the configuration file for the current . + + The path to the configuration file for the current . + + + The .NET Compact Framework 1.0 does not have a concept of a configuration + file. For this runtime, we use the entry assembly location as the root for + the configuration file name. + + + The value returned may be either a local file path or a URI. + + + + + + Gets the path to the file that first executed in the current . + + The path to the entry assembly. + + + Gets the path to the file that first executed in the current . + + + + + + Gets the ID of the current thread. + + The ID of the current thread. + + + On the .NET framework, the AppDomain.GetCurrentThreadId method + is used to obtain the thread ID for the current thread. This is the + operating system ID for the thread. + + + On the .NET Compact Framework 1.0 it is not possible to get the + operating system thread ID for the current thread. The native method + GetCurrentThreadId is implemented inline in a header file + and cannot be called. + + + On the .NET Framework 2.0 the Thread.ManagedThreadId is used as this + gives a stable id unrelated to the operating system thread ID which may + change if the runtime is using fibers. + + + + + + Get the host name or machine name for the current machine + + + The hostname or machine name + + + + Get the host name or machine name for the current machine + + + The host name () or + the machine name (Environment.MachineName) for + the current machine, or if neither of these are available + then NOT AVAILABLE is returned. + + + + + + Get this application's friendly name + + + The friendly name of this application as a string + + + + If available the name of the application is retrieved from + the AppDomain using AppDomain.CurrentDomain.FriendlyName. + + + Otherwise the file name of the entry assembly is used. + + + + + + Get the start time for the current process. + + + + This is the time at which the log4net library was loaded into the + AppDomain. Due to reports of a hang in the call to System.Diagnostics.Process.StartTime + this is not the start time for the current process. + + + The log4net library should be loaded by an application early during its + startup, therefore this start time should be a good approximation for + the actual start time. + + + Note that AppDomains may be loaded and unloaded within the + same process without the process terminating, however this start time + will be set per AppDomain. + + + + + + Text to output when a null is encountered. + + + + Use this value to indicate a null has been encountered while + outputting a string representation of an item. + + + The default value is (null). This value can be overridden by specifying + a value for the log4net.NullText appSetting in the application's + .config file. + + + + + + Text to output when an unsupported feature is requested. + + + + Use this value when an unsupported feature is requested. + + + The default value is NOT AVAILABLE. This value can be overridden by specifying + a value for the log4net.NotAvailableText appSetting in the application's + .config file. + + + + + + Utility class that represents a format string. + + + + Utility class that represents a format string. + + + Nicko Cadell + + + + Initialise the + + An that supplies culture-specific formatting information. + A containing zero or more format items. + An array containing zero or more objects to format. + + + + Format the string and arguments + + the formatted string + + + + Replaces the format item in a specified with the text equivalent + of the value of a corresponding instance in a specified array. + A specified parameter supplies culture-specific formatting information. + + An that supplies culture-specific formatting information. + A containing zero or more format items. + An array containing zero or more objects to format. + + A copy of format in which the format items have been replaced by the + equivalent of the corresponding instances of in args. + + + + This method does not throw exceptions. If an exception thrown while formatting the result the + exception and arguments are returned in the result string. + + + + + + Process an error during StringFormat + + + + + Dump the contents of an array into a string builder + + + + + Dump an object to a string + + + + + Implementation of Properties collection for the + + + + Class implements a collection of properties that is specific to each thread. + The class is not synchronized as each thread has its own . + + + Nicko Cadell + + + + The thread local data slot to use to store a PropertiesDictionary. + + + + + Internal constructor + + + + Initializes a new instance of the class. + + + + + + Remove a property + + the key for the entry to remove + + + Remove a property + + + + + + Clear all properties + + + + Clear all properties + + + + + + Get the PropertiesDictionary for this thread. + + create the dictionary if it does not exist, otherwise return null if is does not exist + the properties for this thread + + + The collection returned is only to be used on the calling thread. If the + caller needs to share the collection between different threads then the + caller must clone the collection before doing so. + + + + + + Gets or sets the value of a property + + + The value for the property with the specified key + + + + Gets or sets the value of a property + + + + + + Implementation of Stack for the + + + + Implementation of Stack for the + + + Nicko Cadell + + + + The stack store. + + + + + Internal constructor + + + + Initializes a new instance of the class. + + + + + + Clears all the contextual information held in this stack. + + + + Clears all the contextual information held in this stack. + Only call this if you think that this tread is being reused after + a previous call execution which may not have completed correctly. + You do not need to use this method if you always guarantee to call + the method of the + returned from even in exceptional circumstances, + for example by using the using(log4net.ThreadContext.Stacks["NDC"].Push("Stack_Message")) + syntax. + + + + + + Removes the top context from this stack. + + The message in the context that was removed from the top of this stack. + + + Remove the top context from this stack, and return + it to the caller. If this stack is empty then an + empty string (not ) is returned. + + + + + + Pushes a new context message into this stack. + + The new context message. + + An that can be used to clean up the context stack. + + + + Pushes a new context onto this stack. An + is returned that can be used to clean up this stack. This + can be easily combined with the using keyword to scope the + context. + + + Simple example of using the Push method with the using keyword. + + using(log4net.ThreadContext.Stacks["NDC"].Push("Stack_Message")) + { + log.Warn("This should have an ThreadContext Stack message"); + } + + + + + + Gets the current context information for this stack. + + The current context information. + + + + Gets the current context information for this stack. + + Gets the current context information + + + Gets the current context information for this stack. + + + + + + Get a portable version of this object + + the portable instance of this object + + + Get a cross thread portable version of this object + + + + + + The number of messages in the stack + + + The current number of messages in the stack + + + + The current number of messages in the stack. That is + the number of times has been called + minus the number of times has been called. + + + + + + Gets and sets the internal stack used by this + + The internal storage stack + + + This property is provided only to support backward compatability + of the . Tytpically the internal stack should not + be modified. + + + + + + Inner class used to represent a single context frame in the stack. + + + + Inner class used to represent a single context frame in the stack. + + + + + + Constructor + + The message for this context. + The parent context in the chain. + + + Initializes a new instance of the class + with the specified message and parent context. + + + + + + Get the message. + + The message. + + + Get the message. + + + + + + Gets the full text of the context down to the root level. + + + The full text of the context down to the root level. + + + + Gets the full text of the context down to the root level. + + + + + + Struct returned from the method. + + + + This struct implements the and is designed to be used + with the pattern to remove the stack frame at the end of the scope. + + + + + + The ThreadContextStack internal stack + + + + + The depth to trim the stack to when this instance is disposed + + + + + Constructor + + The internal stack used by the ThreadContextStack. + The depth to return the stack to when this object is disposed. + + + Initializes a new instance of the class with + the specified stack and return depth. + + + + + + Returns the stack to the correct depth. + + + + Returns the stack to the correct depth. + + + + + + Implementation of Stacks collection for the + + + + Implementation of Stacks collection for the + + + Nicko Cadell + + + + Internal constructor + + + + Initializes a new instance of the class. + + + + + + Gets the named thread context stack + + + The named stack + + + + Gets the named thread context stack + + + + + + Utility class for transforming strings. + + + + Utility class for transforming strings. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to prevent instantiation of this class. + + + + + + Write a string to an + + the writer to write to + the string to write + The string to replace non XML compliant chars with + + + The test is escaped either using XML escape entities + or using CDATA sections. + + + + + + Replace invalid XML characters in text string + + the XML text input string + the string to use in place of invalid characters + A string that does not contain invalid XML characters. + + + Certain Unicode code points are not allowed in the XML InfoSet, for + details see: http://www.w3.org/TR/REC-xml/#charsets. + + + This method replaces any illegal characters in the input string + with the mask string specified. + + + + + + Count the number of times that the substring occurs in the text + + the text to search + the substring to find + the number of times the substring occurs in the text + + + The substring is assumed to be non repeating within itself. + + + + + + Impersonate a Windows Account + + + + This impersonates a Windows account. + + + How the impersonation is done depends on the value of . + This allows the context to either impersonate a set of user credentials specified + using username, domain name and password or to revert to the process credentials. + + + + + + Default constructor + + + + Default constructor + + + + + + Initialize the SecurityContext based on the options set. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + The security context will try to Logon the specified user account and + capture a primary token for impersonation. + + + The required , + or properties were not specified. + + + + Impersonate the Windows account specified by the and properties. + + caller provided state + + An instance that will revoke the impersonation of this SecurityContext + + + + Depending on the property either + impersonate a user using credentials supplied or revert + to the process credentials. + + + + + + Create a given the userName, domainName and password. + + the user name + the domain name + the password + the for the account specified + + + Uses the Windows API call LogonUser to get a principal token for the account. This + token is used to initialize the WindowsIdentity. + + + + + + Gets or sets the impersonation mode for this security context + + + The impersonation mode for this security context + + + + Impersonate either a user with user credentials or + revert this thread to the credentials of the process. + The value is one of the + enum. + + + The default value is + + + When the mode is set to + the user's credentials are established using the + , and + values. + + + When the mode is set to + no other properties need to be set. If the calling thread is + impersonating then it will be reverted back to the process credentials. + + + + + + Gets or sets the Windows username for this security context + + + The Windows username for this security context + + + + This property must be set if + is set to (the default setting). + + + + + + Gets or sets the Windows domain name for this security context + + + The Windows domain name for this security context + + + + The default value for is the local machine name + taken from the property. + + + This property must be set if + is set to (the default setting). + + + + + + Sets the password for the Windows account specified by the and properties. + + + The password for the Windows account specified by the and properties. + + + + This property must be set if + is set to (the default setting). + + + + + + The impersonation modes for the + + + + See the property for + details. + + + + + + Impersonate a user using the credentials supplied + + + + + Revert this the thread to the credentials of the process + + + + + Adds to + + + + Helper class to expose the + through the interface. + + + + + + Constructor + + the impersonation context being wrapped + + + Constructor + + + + + + Revert the impersonation + + + + Revert the impersonation + + + + + + The log4net Global Context. + + + + The GlobalContext provides a location for global debugging + information to be stored. + + + The global context has a properties map and these properties can + be included in the output of log messages. The + supports selecting and outputing these properties. + + + By default the log4net:HostName property is set to the name of + the current machine. + + + + + GlobalContext.Properties["hostname"] = Environment.MachineName; + + + + Nicko Cadell + + + + Private Constructor. + + + Uses a private access modifier to prevent instantiation of this class. + + + + + The global context properties instance + + + + + The global properties map. + + + The global properties map. + + + + The global properties map. + + + + + + The log4net Logical Thread Context. + + + + The LogicalThreadContext provides a location for specific debugging + information to be stored. + The LogicalThreadContext properties override any or + properties with the same name. + + + The Logical Thread Context has a properties map and a stack. + The properties and stack can + be included in the output of log messages. The + supports selecting and outputting these properties. + + + The Logical Thread Context provides a diagnostic context for the current call context. + This is an instrument for distinguishing interleaved log + output from different sources. Log output is typically interleaved + when a server handles multiple clients near-simultaneously. + + + The Logical Thread Context is managed on a per basis. + + + Example of using the thread context properties to store a username. + + LogicalThreadContext.Properties["user"] = userName; + log.Info("This log message has a LogicalThreadContext Property called 'user'"); + + + Example of how to push a message into the context stack + + using(LogicalThreadContext.Stacks["LDC"].Push("my context message")) + { + log.Info("This log message has a LogicalThreadContext Stack message that includes 'my context message'"); + + } // at the end of the using block the message is automatically popped + + + + Nicko Cadell + + + + Private Constructor. + + + + Uses a private access modifier to prevent instantiation of this class. + + + + + + The thread context properties instance + + + + + The thread context stacks instance + + + + + The thread properties map + + + The thread properties map + + + + The LogicalThreadContext properties override any + or properties with the same name. + + + + + + The thread stacks + + + stack map + + + + The logical thread stacks. + + + + + + This class is used by client applications to request logger instances. + + + + This class has static methods that are used by a client to request + a logger instance. The method is + used to retrieve a logger. + + + See the interface for more details. + + + Simple example of logging messages + + ILog log = LogManager.GetLogger("application-log"); + + log.Info("Application Start"); + log.Debug("This is a debug message"); + + if (log.IsDebugEnabled) + { + log.Debug("This is another debug message"); + } + + + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + Uses a private access modifier to prevent instantiation of this class. + + + + Returns the named logger if it exists. + + Returns the named logger if it exists. + + + + If the named logger exists (in the default repository) then it + returns a reference to the logger, otherwise it returns null. + + + The fully qualified logger name to look for. + The logger found, or null if no logger could be found. + + + + Returns the named logger if it exists. + + + + If the named logger exists (in the specified repository) then it + returns a reference to the logger, otherwise it returns + null. + + + The repository to lookup in. + The fully qualified logger name to look for. + + The logger found, or null if the logger doesn't exist in the specified + repository. + + + + + Returns the named logger if it exists. + + + + If the named logger exists (in the repository for the specified assembly) then it + returns a reference to the logger, otherwise it returns + null. + + + The assembly to use to lookup the repository. + The fully qualified logger name to look for. + + The logger, or null if the logger doesn't exist in the specified + assembly's repository. + + + + Get the currently defined loggers. + + Returns all the currently defined loggers in the default repository. + + + The root logger is not included in the returned array. + + All the defined loggers. + + + + Returns all the currently defined loggers in the specified repository. + + The repository to lookup in. + + The root logger is not included in the returned array. + + All the defined loggers. + + + + Returns all the currently defined loggers in the specified assembly's repository. + + The assembly to use to lookup the repository. + + The root logger is not included in the returned array. + + All the defined loggers. + + + Get or create a logger. + + Retrieves or creates a named logger. + + + + Retrieves a logger named as the + parameter. If the named logger already exists, then the + existing instance will be returned. Otherwise, a new instance is + created. + + By default, loggers do not have a set level but inherit + it from the hierarchy. This is one of the central features of + log4net. + + + The name of the logger to retrieve. + The logger with the name specified. + + + + Retrieves or creates a named logger. + + + + Retrieve a logger named as the + parameter. If the named logger already exists, then the + existing instance will be returned. Otherwise, a new instance is + created. + + + By default, loggers do not have a set level but inherit + it from the hierarchy. This is one of the central features of + log4net. + + + The repository to lookup in. + The name of the logger to retrieve. + The logger with the name specified. + + + + Retrieves or creates a named logger. + + + + Retrieve a logger named as the + parameter. If the named logger already exists, then the + existing instance will be returned. Otherwise, a new instance is + created. + + + By default, loggers do not have a set level but inherit + it from the hierarchy. This is one of the central features of + log4net. + + + The assembly to use to lookup the repository. + The name of the logger to retrieve. + The logger with the name specified. + + + + Shorthand for . + + + Get the logger for the fully qualified name of the type specified. + + The full name of will be used as the name of the logger to retrieve. + The logger with the name specified. + + + + Shorthand for . + + + Gets the logger for the fully qualified name of the type specified. + + The repository to lookup in. + The full name of will be used as the name of the logger to retrieve. + The logger with the name specified. + + + + Shorthand for . + + + Gets the logger for the fully qualified name of the type specified. + + The assembly to use to lookup the repository. + The full name of will be used as the name of the logger to retrieve. + The logger with the name specified. + + + + Shuts down the log4net system. + + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in all the + default repositories. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + Shutdown a logger repository. + + Shuts down the default repository. + + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in the + default repository. + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + + Shuts down the repository for the repository specified. + + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in the + specified. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + The repository to shutdown. + + + + Shuts down the repository specified. + + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in the + repository. The repository is looked up using + the specified. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + The assembly to use to lookup the repository. + + + Reset the configuration of a repository + + Resets all values contained in this repository instance to their defaults. + + + + Resets all values contained in the repository instance to their + defaults. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set to its default "off" value. + + + + + + Resets all values contained in this repository instance to their defaults. + + + + Reset all values contained in the repository instance to their + defaults. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set to its default "off" value. + + + The repository to reset. + + + + Resets all values contained in this repository instance to their defaults. + + + + Reset all values contained in the repository instance to their + defaults. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set to its default "off" value. + + + The assembly to use to lookup the repository to reset. + + + Get the logger repository. + + Returns the default instance. + + + + Gets the for the repository specified + by the callers assembly (). + + + The instance for the default repository. + + + + Returns the default instance. + + The default instance. + + + Gets the for the repository specified + by the argument. + + + The repository to lookup in. + + + + Returns the default instance. + + The default instance. + + + Gets the for the repository specified + by the argument. + + + The assembly to use to lookup the repository. + + + Get a logger repository. + + Returns the default instance. + + + + Gets the for the repository specified + by the callers assembly (). + + + The instance for the default repository. + + + + Returns the default instance. + + The default instance. + + + Gets the for the repository specified + by the argument. + + + The repository to lookup in. + + + + Returns the default instance. + + The default instance. + + + Gets the for the repository specified + by the argument. + + + The assembly to use to lookup the repository. + + + Create a domain + + Creates a repository with the specified repository type. + + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + The created will be associated with the repository + specified such that a call to will return + the same repository instance. + + + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + Create a logger repository. + + Creates a repository with the specified repository type. + + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + The created will be associated with the repository + specified such that a call to will return + the same repository instance. + + + + + + Creates a repository with the specified name. + + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + Creates the default type of which is a + object. + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The name of the repository, this must be unique amongst repositories. + The created for the repository. + The specified repository already exists. + + + + Creates a repository with the specified name. + + + + Creates the default type of which is a + object. + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The name of the repository, this must be unique amongst repositories. + The created for the repository. + The specified repository already exists. + + + + Creates a repository with the specified name and repository type. + + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The name of the repository, this must be unique to the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + The specified repository already exists. + + + + Creates a repository with the specified name and repository type. + + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The name of the repository, this must be unique to the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + The specified repository already exists. + + + + Creates a repository for the specified assembly and repository type. + + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + The assembly to use to get the name of the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + + Creates a repository for the specified assembly and repository type. + + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + The assembly to use to get the name of the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + + Gets the list of currently defined repositories. + + + + Get an array of all the objects that have been created. + + + An array of all the known objects. + + + + Looks up the wrapper object for the logger specified. + + The logger to get the wrapper for. + The wrapper for the logger specified. + + + + Looks up the wrapper objects for the loggers specified. + + The loggers to get the wrappers for. + The wrapper objects for the loggers specified. + + + + Create the objects used by + this manager. + + The logger to wrap. + The wrapper for the logger specified. + + + + The wrapper map to use to hold the objects. + + + + + Implementation of Mapped Diagnostic Contexts. + + + + + The MDC is deprecated and has been replaced by the . + The current MDC implementation forwards to the ThreadContext.Properties. + + + + The MDC class is similar to the class except that it is + based on a map instead of a stack. It provides mapped + diagnostic contexts. A Mapped Diagnostic Context, or + MDC in short, is an instrument for distinguishing interleaved log + output from different sources. Log output is typically interleaved + when a server handles multiple clients near-simultaneously. + + + The MDC is managed on a per thread basis. + + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + Uses a private access modifier to prevent instantiation of this class. + + + + + Gets the context value identified by the parameter. + + The key to lookup in the MDC. + The string value held for the key, or a null reference if no corresponding value is found. + + + + The MDC is deprecated and has been replaced by the . + The current MDC implementation forwards to the ThreadContext.Properties. + + + + If the parameter does not look up to a + previously defined context then null will be returned. + + + + + + Add an entry to the MDC + + The key to store the value under. + The value to store. + + + + The MDC is deprecated and has been replaced by the . + The current MDC implementation forwards to the ThreadContext.Properties. + + + + Puts a context value (the parameter) as identified + with the parameter into the current thread's + context map. + + + If a value is already defined for the + specified then the value will be replaced. If the + is specified as null then the key value mapping will be removed. + + + + + + Removes the key value mapping for the key specified. + + The key to remove. + + + + The MDC is deprecated and has been replaced by the . + The current MDC implementation forwards to the ThreadContext.Properties. + + + + Remove the specified entry from this thread's MDC + + + + + + Clear all entries in the MDC + + + + + The MDC is deprecated and has been replaced by the . + The current MDC implementation forwards to the ThreadContext.Properties. + + + + Remove all the entries from this thread's MDC + + + + + + Implementation of Nested Diagnostic Contexts. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + A Nested Diagnostic Context, or NDC in short, is an instrument + to distinguish interleaved log output from different sources. Log + output is typically interleaved when a server handles multiple + clients near-simultaneously. + + + Interleaved log output can still be meaningful if each log entry + from different contexts had a distinctive stamp. This is where NDCs + come into play. + + + Note that NDCs are managed on a per thread basis. The NDC class + is made up of static methods that operate on the context of the + calling thread. + + + How to push a message into the context + + using(NDC.Push("my context message")) + { + ... all log calls will have 'my context message' included ... + + } // at the end of the using block the message is automatically removed + + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + Uses a private access modifier to prevent instantiation of this class. + + + + + Clears all the contextual information held on the current thread. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + Clears the stack of NDC data held on the current thread. + + + + + + Creates a clone of the stack of context information. + + A clone of the context info for this thread. + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + The results of this method can be passed to the + method to allow child threads to inherit the context of their + parent thread. + + + + + + Inherits the contextual information from another thread. + + The context stack to inherit. + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + This thread will use the context information from the stack + supplied. This can be used to initialize child threads with + the same contextual information as their parent threads. These + contexts will NOT be shared. Any further contexts that + are pushed onto the stack will not be visible to the other. + Call to obtain a stack to pass to + this method. + + + + + + Removes the top context from the stack. + + + The message in the context that was removed from the top + of the stack. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + Remove the top context from the stack, and return + it to the caller. If the stack is empty then an + empty string (not null) is returned. + + + + + + Pushes a new context message. + + The new context message. + + An that can be used to clean up + the context stack. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + Pushes a new context onto the context stack. An + is returned that can be used to clean up the context stack. This + can be easily combined with the using keyword to scope the + context. + + + Simple example of using the Push method with the using keyword. + + using(log4net.NDC.Push("NDC_Message")) + { + log.Warn("This should have an NDC message"); + } + + + + + + Removes the context information for this thread. It is + not required to call this method. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + This method is not implemented. + + + + + + Forces the stack depth to be at most . + + The maximum depth of the stack + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + Forces the stack depth to be at most . + This may truncate the head of the stack. This only affects the + stack in the current thread. Also it does not prevent it from + growing, it only sets the maximum depth at the time of the + call. This can be used to return to a known context depth. + + + + + + Gets the current context depth. + + The current context depth. + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + The number of context values pushed onto the context stack. + + + Used to record the current depth of the context. This can then + be restored using the method. + + + + + + + The log4net Thread Context. + + + + The ThreadContext provides a location for thread specific debugging + information to be stored. + The ThreadContext properties override any + properties with the same name. + + + The thread context has a properties map and a stack. + The properties and stack can + be included in the output of log messages. The + supports selecting and outputting these properties. + + + The Thread Context provides a diagnostic context for the current thread. + This is an instrument for distinguishing interleaved log + output from different sources. Log output is typically interleaved + when a server handles multiple clients near-simultaneously. + + + The Thread Context is managed on a per thread basis. + + + Example of using the thread context properties to store a username. + + ThreadContext.Properties["user"] = userName; + log.Info("This log message has a ThreadContext Property called 'user'"); + + + Example of how to push a message into the context stack + + using(ThreadContext.Stacks["NDC"].Push("my context message")) + { + log.Info("This log message has a ThreadContext Stack message that includes 'my context message'"); + + } // at the end of the using block the message is automatically popped + + + + Nicko Cadell + + + + Private Constructor. + + + + Uses a private access modifier to prevent instantiation of this class. + + + + + + The thread context properties instance + + + + + The thread context stacks instance + + + + + The thread properties map + + + The thread properties map + + + + The ThreadContext properties override any + properties with the same name. + + + + + + The thread stacks + + + stack map + + + + The thread local stacks. + + + + + diff --git a/tools/NHibernate/nmock.dll b/tools/NHibernate/nmock.dll new file mode 100644 index 000000000..d5f0d22d3 Binary files /dev/null and b/tools/NHibernate/nmock.dll differ diff --git a/tools/NHibernate/nmock.license.txt b/tools/NHibernate/nmock.license.txt new file mode 100644 index 000000000..a66c5ece8 --- /dev/null +++ b/tools/NHibernate/nmock.license.txt @@ -0,0 +1,34 @@ +NMock is open-source and released under the BSD license. + +Copyright (c) 2002, Joe Walnes, Chris Stevenson, Owen Rogers +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +* Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + +* The names of the contributors may not be used to endorse or + promote products derived from this software without specific + prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS +BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. diff --git a/tools/NHibernate/nunit.core.dll b/tools/NHibernate/nunit.core.dll new file mode 100644 index 000000000..d3115a6d6 Binary files /dev/null and b/tools/NHibernate/nunit.core.dll differ diff --git a/tools/NHibernate/nunit.framework.dll b/tools/NHibernate/nunit.framework.dll new file mode 100644 index 000000000..989ec2a06 Binary files /dev/null and b/tools/NHibernate/nunit.framework.dll differ diff --git a/tools/NHibernate/nunit.framework.license.txt b/tools/NHibernate/nunit.framework.license.txt new file mode 100644 index 000000000..0864a7458 --- /dev/null +++ b/tools/NHibernate/nunit.framework.license.txt @@ -0,0 +1,14 @@ +Copyright © 2002-2003 James W. Newkirk, Michael C. Two, Alexei A. Vorontsov, Charlie Poole +Copyright © 2000-2003 Philip A. Craig + +This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment (see the following) in the product documentation is required. + +Portions Copyright © 2002-2003 James W. Newkirk, Michael C. Two, Alexei A. Vorontsov, Charlie Poole or Copyright © 2000-2003 Philip A. Craig + +2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source distribution. \ No newline at end of file diff --git a/tools/ShadeTree/ShadeTree.Core.dll b/tools/ShadeTree/ShadeTree.Core.dll new file mode 100644 index 000000000..119ff6c36 Binary files /dev/null and b/tools/ShadeTree/ShadeTree.Core.dll differ diff --git a/tools/StructureMap/AxInterop.SHDocVw.dll b/tools/StructureMap/AxInterop.SHDocVw.dll new file mode 100644 index 000000000..23547ab1f Binary files /dev/null and b/tools/StructureMap/AxInterop.SHDocVw.dll differ diff --git a/tools/StructureMap/Interop.SHDocVw.dll b/tools/StructureMap/Interop.SHDocVw.dll new file mode 100644 index 000000000..315a98fa9 Binary files /dev/null and b/tools/StructureMap/Interop.SHDocVw.dll differ diff --git a/tools/StructureMap/Microsoft.mshtml.dll b/tools/StructureMap/Microsoft.mshtml.dll new file mode 100644 index 000000000..c62119f47 Binary files /dev/null and b/tools/StructureMap/Microsoft.mshtml.dll differ diff --git a/tools/StructureMap/Rhino.Mocks.dll b/tools/StructureMap/Rhino.Mocks.dll new file mode 100644 index 000000000..e6f83e89a Binary files /dev/null and b/tools/StructureMap/Rhino.Mocks.dll differ diff --git a/tools/StructureMap/StructureMap.AutoMocking.dll b/tools/StructureMap/StructureMap.AutoMocking.dll new file mode 100644 index 000000000..801435a13 Binary files /dev/null and b/tools/StructureMap/StructureMap.AutoMocking.dll differ diff --git a/tools/StructureMap/StructureMap.AutoMocking.pdb b/tools/StructureMap/StructureMap.AutoMocking.pdb new file mode 100644 index 000000000..f7488fe4b Binary files /dev/null and b/tools/StructureMap/StructureMap.AutoMocking.pdb differ diff --git a/tools/StructureMap/StructureMap.Client.dll b/tools/StructureMap/StructureMap.Client.dll new file mode 100644 index 000000000..b7a314eb4 Binary files /dev/null and b/tools/StructureMap/StructureMap.Client.dll differ diff --git a/tools/StructureMap/StructureMap.DataAccess.dll b/tools/StructureMap/StructureMap.DataAccess.dll new file mode 100644 index 000000000..9585ffaff Binary files /dev/null and b/tools/StructureMap/StructureMap.DataAccess.dll differ diff --git a/tools/StructureMap/StructureMap.DeploymentTasks.dll b/tools/StructureMap/StructureMap.DeploymentTasks.dll new file mode 100644 index 000000000..4932d0081 Binary files /dev/null and b/tools/StructureMap/StructureMap.DeploymentTasks.dll differ diff --git a/tools/StructureMap/StructureMap.dll b/tools/StructureMap/StructureMap.dll new file mode 100644 index 000000000..48678b9ed Binary files /dev/null and b/tools/StructureMap/StructureMap.dll differ diff --git a/tools/StructureMap/StructureMap.pdb b/tools/StructureMap/StructureMap.pdb new file mode 100644 index 000000000..ebb28283a Binary files /dev/null and b/tools/StructureMap/StructureMap.pdb differ diff --git a/tools/StructureMap/StructureMapDoctor.exe b/tools/StructureMap/StructureMapDoctor.exe new file mode 100644 index 000000000..a3ed737a5 Binary files /dev/null and b/tools/StructureMap/StructureMapDoctor.exe differ diff --git a/tools/StructureMap/StructureMapExplorer.exe b/tools/StructureMap/StructureMapExplorer.exe new file mode 100644 index 000000000..9e4f26678 Binary files /dev/null and b/tools/StructureMap/StructureMapExplorer.exe differ diff --git a/tools/StructureMap/log4net.dll b/tools/StructureMap/log4net.dll new file mode 100644 index 000000000..46ecf22e3 Binary files /dev/null and b/tools/StructureMap/log4net.dll differ diff --git a/tools/StructureMap/nmock.dll b/tools/StructureMap/nmock.dll new file mode 100644 index 000000000..d5f0d22d3 Binary files /dev/null and b/tools/StructureMap/nmock.dll differ diff --git a/tools/StructureMap/nunit.framework.dll b/tools/StructureMap/nunit.framework.dll new file mode 100644 index 000000000..0881761a2 Binary files /dev/null and b/tools/StructureMap/nunit.framework.dll differ diff --git a/tools/fit/FitLibrary.dll b/tools/fit/FitLibrary.dll new file mode 100644 index 000000000..ac9298546 Binary files /dev/null and b/tools/fit/FitLibrary.dll differ diff --git a/tools/fit/FitServer.exe b/tools/fit/FitServer.exe new file mode 100644 index 000000000..b0616202a Binary files /dev/null and b/tools/fit/FitServer.exe differ diff --git a/tools/fit/TestRunner.exe b/tools/fit/TestRunner.exe new file mode 100644 index 000000000..4d047cf9f Binary files /dev/null and b/tools/fit/TestRunner.exe differ diff --git a/tools/fit/fit.dll b/tools/fit/fit.dll new file mode 100644 index 000000000..2b5b54201 Binary files /dev/null and b/tools/fit/fit.dll differ diff --git a/tools/fit/fitnesse.jar b/tools/fit/fitnesse.jar new file mode 100644 index 000000000..30d00dee1 Binary files /dev/null and b/tools/fit/fitnesse.jar differ diff --git a/tools/rhino/Rhino.Mocks.dll b/tools/rhino/Rhino.Mocks.dll new file mode 100644 index 000000000..7ae54f1eb Binary files /dev/null and b/tools/rhino/Rhino.Mocks.dll differ diff --git a/tools/rhino/Rhino.Mocks.xml b/tools/rhino/Rhino.Mocks.xml new file mode 100644 index 000000000..453699cbe --- /dev/null +++ b/tools/rhino/Rhino.Mocks.xml @@ -0,0 +1,7122 @@ + + + + Rhino.Mocks + + + + + Interface for constraints + + + + + determains if the object pass the constraints + + + + + And operator for constraints + + + + + Not operator for constraints + + + + + Or operator for constraints + + + + + Allow overriding of || or && + + + + + + + + + Allow overriding of || or && + + + + + + + + + Gets the message for this constraint + + + + + + + Constrain that the property matches another constraint. + + + + + Creates a new instance. + + Name of the property. + Constraint to place on the property value. + + + + Creates a new instance, specifying a disambiguating + for the property. + + The type that declares the property, used to disambiguate between properties. + Name of the property. + Constraint to place on the property value. + + + + Determines if the object passes the constraint. + + + + + Gets the message for this constraint + + + + + + + Constrain that the property has a specified value + + + + + Creates a new instance. + + Name of the property. + Expected value. + + + + Creates a new instance, specifying a disambiguating + for the property. + + The type that declares the property, used to disambiguate between properties. + Name of the property. + Expected value. + + + + Constrain that the parameter must be of the specified type + + + + + Creates a new instance. + + Type. + + + + determains if the object pass the constraints + + + + + Gets the message for this constraint + + + + + + + Constraint that determines whether an object is the same object as another. + + + + + Creates a new instance. + + Obj. + + + + Determines if the object passes the constraints. + + + + + Gets the message for this constraint. + + + + + Evaluate a parameter using constraints + + + + + Create new instance + + + + + + + determains if the object pass the constraints + + + + + Gets the message for this constraint + + + + + + + Constrain that the list contains the same items as the parameter list + + + + + Creates a new instance. + + In list. + + + + determains if the object pass the constraints + + + + + Gets the message for this constraint + + + + + + + Constrain that the parameter is one of the items in the list + + + + + Creates a new instance. + + In list. + + + + determains if the object pass the constraints + + + + + Gets the message for this constraint + + + + + + + Constrain that the object is inside the parameter list + + + + + Creates a new instance. + + In list. + + + + determains if the object pass the constraints + + + + + Gets the message for this constraint + + + + + + + Applies another AbstractConstraint to the collection count. + + + + + Creates a new instance. + + The constraint that should be applied to the collection count. + + + + Determines if the parameter conforms to this constraint. + + + + + Gets the message for this constraint. + + + + + Applies another AbstractConstraint to a specific list element. + + + + + Creates a new instance. + + The zero-based index of the list element. + The constraint that should be applied to the list element. + + + + Determines if the parameter conforms to this constraint. + + + + + Gets the message for this constraint + + + + + + + Combines two constraints, constraint pass if either is fine. + + + + + Creates a new instance. + + C1. + C2. + + + + determains if the object pass the constraints + + + + + Gets the message for this constraint + + + + + + + Negate a constraint + + + + + Creates a new instance. + + C1. + + + + determains if the object pass the constraints + + + + + Gets the message for this constraint + + + + + + + Combines two constraints + + + + + + + Creates a new instance. + + C1. + C2. + + + + determains if the object pass the constraints + + + + + Gets the message for this constraint + + + + + + + Constrain the argument to validate according to regex pattern + + + + + Creates a new instance. + + Pattern. + + + + determains if the object pass the constraints + + + + + Gets the message for this constraint + + + + + + + Constraint that evaluate whatever an argument contains the specified string. + + + + + Creates a new instance. + + Inner string. + + + + determains if the object pass the constraints + + + + + Gets the message for this constraint + + + + + + + Constraint that evaluate whatever an argument ends with the specified string + + + + + Creates a new instance. + + End. + + + + determains if the object pass the constraints + + + + + Gets the message for this constraint + + + + + + + Constraint that evaluate whatever an argument start with the specified string + + + + + Creates a new instance. + + Start. + + + + determains if the object pass the constraints + + + + + Gets the message for this constraint + + + + + + + Constraint that evaluate whatever an object equals another + + + + + Creates a new instance. + + Obj. + + + + determains if the object pass the constraints + + + + + Gets the message for this constraint + + + + + + + Constraint that always returns true + + + + + determains if the object pass the constraints + + + + + Gets the message for this constraint + + + + + + + Constraint that evaluate whatever a comparable is greater than another + + + + + Creates a new instance. + + + + + determains if the object pass the constraints + + + + + Gets the message for this constraint + + + + + + + Central location for constraints + + + + + Evaluate a greater than constraint for . + + The object the parameter should be greater than + + + + Evaluate a less than constraint for . + + The object the parameter should be less than + + + + Evaluate a less than or equal constraint for . + + The object the parameter should be less than or equal to + + + + Evaluate a greater than or equal constraint for . + + The object the parameter should be greater than or equal to + + + + Evaluate an equal constraint for . + + The object the parameter should equal to + + + + Evaluate a not equal constraint for . + + The object the parameter should not equal to + + + + Evaluate a same as constraint. + + The object the parameter should the same as. + + + + Evaluate a not same as constraint. + + The object the parameter should not be the same as. + + + + A constraints that accept anything + + + + + + + A constraint that accept only nulls + + + + + + + A constraint that accept only non null values + + + + + + + A constraint that accept only value of the specified type + + + + + A constraint that accept only value of the specified type + + + + + Evaluate a parameter using a predicate + + The predicate to use + + + + Central location for constraints about lists and collections + + + + + Determines whether the specified obj is in the paramter. + The parameter must be IEnumerable. + + Obj. + + + + + + Determains whatever the parameter is in the collection. + + + + + Determains that the parameter collection is identical to the specified collection + + + + + Determines that the parameter collection has the specified number of elements. + + The constraint that should be applied to the collection count. + + + + Determines that an element of the parameter collections conforms to another AbstractConstraint. + + The zero-based index of the list element. + The constraint which should be applied to the list element. + + + + Central location for constraints for object's properties + + + + + Constrains the parameter to have property with the specified value + + Name of the property. + Expected value. + + + + + + Constrains the parameter to have property with the specified value. + + The type that declares the property, used to disambiguate between properties. + Name of the property. + Expected value. + + + + + + Constrains the parameter to have a property satisfying a specified constraint. + + Name of the property. + Constraint for the property. + + + + Constrains the parameter to have a property satisfying a specified constraint. + + The type that declares the property, used to disambiguate between properties. + Name of the property. + Constraint for the property. + + + + Determines whether the parameter has the specified property and that it is null. + + Name of the property. + + + + + + Determines whether the parameter has the specified property and that it is null. + + The type that declares the property, used to disambiguate between properties. + Name of the property. + + + + + + Determines whether the parameter has the specified property and that it is not null. + + Name of the property. + + + + + + Determines whether the parameter has the specified property and that it is not null. + + The type that declares the property, used to disambiguate between properties. + Name of the property. + + + + + + Central location for all text related constraints + + + + + Constrain the argument to starts with the specified string + + + + + Constrain the argument to end with the specified string + + + + + Constrain the argument to contain the specified string + + + + + Constrain the argument to validate according to regex pattern + + + + + An expectaton violation was detected. + + + + + Creates a new instance. + + Message. + + + + Serialization constructor + + + + + Signals that an object was call on a mock repostiroy which doesn't + belong to this mock repository or not a mock + + + + + Creates a new instance. + + Message. + + + + Serialization constructor + + + + + Allows to set expectation on methods that has return values. + For methods with void return value, you need to use LastCall + + + + + The method options for the last call on /any/ proxy on /any/ repository on the current thread. + This method if not safe for multi threading scenarios, use . + + + + + Get the method options for the last method call on the mockInstance. + + + + + Interface to validate that a method call is correct. + + + + + Validate the arguments for the method. + This method can be called numerous times, so be careful about side effects + + The arguments with which the method was called + + + + Add an actual method call to this expectation + + + + + Returns the return value or throw the exception and setup any output / ref parameters + that has been set. + + + + + Gets the error message. + + + + + + + Range of expected calls + + + + + Number of call actually made for this method + + + + + If this expectation is still waiting for calls. + + + + + The return value for a method matching this expectation + + + + + Gets or sets the exception to throw on a method matching this expectation. + + + + + Gets a value indicating whether this instance's action is staisfied. + A staisfied instance means that there are no more requirements from + this method. A method with non void return value must register either + a return value or an exception to throw. + + + + + Gets the method this expectation is for. + + + + + Gets or sets what special condtions there are for this method + repeating. + + + + + Gets a value indicating whether this expectation was satisfied + + + + + Specify whatever this expectation has a return value set + You can't check ReturnValue for this because a valid return value include null. + + + + + An action to execute when the method is matched. + + + + + Set the out / ref parameters for the method call. + The indexing is zero based and ignores any non out/ref parameter. + It is possible not to pass all the parameters. This method can be called only once. + + + + + Documentation Message + + + + + Gets the invocation for this expectation + + The invocation. + + + + Abstract class that holds common information for + expectations. + + + + + Number of actuall calls made that passed this expectation + + + + + Range of expected calls that should pass this expectation. + + + + + The return value for a method matching this expectation + + + + + The exception to throw on a method matching this expectation. + + + + + The method this expectation is for. + + + + + The return value for this method was set + + + + + Whether this method will repeat + unlimited number of times. + + + + + A delegate that will be run when the + expectation is matched. + + + + + The arguments that matched this expectation. + + + + + Documentation message + + + + + The method originalInvocation + + + + + Get the hash code + + + + + Add an actual method call to this expectation + + + + + Returns the return value or throw the exception and setup output / ref parameters + + + + + Validate the arguments for the method on the child methods + + The arguments with which the method was called + + + + Creates a new instance. + + The originalInvocation for this method, required because it contains the generic type infromation + + + + Creates a new instance. + + Expectation. + + + + Validate the arguments for the method on the child methods + + The arguments with which the method was called + + + + Determines if this object equal to obj + + + + + The error message for these arguments + + + + + Asserts that the delegate has the same parameters as the expectation's method call + + + + + Setter for the outpur / ref parameters for this expecataion. + Can only be set once. + + + + + Specify whatever this expectation has a return value set + You can't check ReturnValue for this because a valid return value include null. + + + + + Gets the method this expectation is for. + + + + + Gets the originalInvocation for this expectation + + The originalInvocation. + + + + Gets or sets what special condtions there are for this method + + + + + Range of expected calls + + + + + Number of call actually made for this method + + + + + If this expectation is still waiting for calls. + + + + + Gets a value indicating whether this expectation was satisfied + + + + + The return value for a method matching this expectation + + + + + An action to execute when the method is matched. + + + + + Gets or sets the exception to throw on a method matching this expectation. + + + + + Gets a value indicating whether this instance's action is staisfied. + A staisfied instance means that there are no more requirements from + this method. A method with non void return value must register either + a return value or an exception to throw or an action to execute. + + + + + Documentation message + + + + + Gets the error message. + + + + + + + Expectation that matchs any arguments for the method. + + + + + Creates a new instance. + + Invocation for this expectation + + + + Creates a new instance. + + Expectation. + + + + Validate the arguments for the method. + + The arguments with which the method was called + + + + Determines if the object equal to expectation + + + + + Get the hash code + + + + + Gets the error message. + + + + + + + Summary description for ArgsEqualExpectation. + + + + + Creates a new instance. + + Expected args. + The invocation for this expectation + + + + Validate the arguments for the method. + + The arguments with which the method was called + + + + Determines if the object equal to expectation + + + + + Get the hash code + + + + + Gets the error message. + + + + + + + Get the expected args. + + + + + Call a specified callback to verify the expectation + + + + + Creates a new instance. + + Expectation. + Callback. + + + + Creates a new instance. + + Invocation for this expectation + Callback. + + + + Validate the arguments for the method on the child methods + + The arguments with which the method was called + + + + Determines if the object equal to expectation + + + + + Get the hash code + + + + + Gets the error message. + + + + + + + Expect the method's arguments to match the contraints + + + + + Creates a new instance. + + Invocation for this expectation + Constraints. + + + + Creates a new instance. + + Expectation. + Constraints. + + + + Validate the arguments for the method. + + The arguments with which the method was called + + + + Determines if the object equal to expectation + + + + + Get the hash code + + + + + Gets the error message. + + + + + + + Log expectations - allows to see what is going on inside Rhino Mocks + + + + + Logs the expectation as is was recorded + + The invocation. + The expectation. + + + + Logs the expectation as it was recorded + + The invocation. + The expectation. + + + + Logs the unexpected method call. + + The invocation. + The message. + + + + Doesn't log anything, just makes happy noises + + + + + Rudimetry implementation that simply logs methods calls as text. + + + + + Initializes a new instance of the class. + + The writer. + + + + Logs the expectation as is was recorded + + The invocation. + The expectation. + + + + Logs the expectation as it was recorded + + The invocation. + The expectation. + + + + Logs the unexpected method call. + + The invocation. + The message. + + + + Different actions on this mock + + + + + Add a method call for this state' mock. + + The invocation for this method + The method that was called + The arguments this method was called with + + + + Verify that this mock expectations have passed. + + + + + Verify that we can move to replay state and move + to the reply state. + + + + + Gets a mock state that match the original mock state of the object. + + + + + Set the exception to throw when Verify is called. + This is used to report exception that may have happened but where caught in the code. + This way, they are reported anyway when Verify() is called. + + + + + Gets the matching verify state for this state + + + + + Get the options for the last method call + + + + + Records all the expectations for a mock + + + + + Set the exception to throw when Verify is called. + This is used to report exception that may have happened but where caught in the code. + This way, they are reported anyway when Verify() is called. + + + + + Creates a new instance. + + Repository. + The proxy that generates the method calls + + + + Add a method call for this state' mock. + + The invocation for this method + The method that was called + The arguments this method was called with + + + + Verify that we can move to replay state and move + to the reply state. + + + + + Verify that we can move to replay state and move + to the reply state. + + + + + Verify that this mock expectations have passed. + + + + + Gets a mock state that match the original mock state of the object. + + + + + Asserts the previous method is closed (had an expectation set on it so we can replay it correctly) + + + + + Gets the last expectation. + + + + + Gets the total method calls count. + + + + + Get the options for the last method call + + + + + Gets the matching verify state for this state + + + + + Behave like a stub, all properties and events acts normally, methods calls + return default values by default (but can use expectations to set them up), etc. + + + + + Initializes a new instance of the class. + + The proxy that generates the method calls + Repository. + + + + We don't care much about expectations here, so we will remove the exepctation if + it is not closed. + + + + + Verify that we can move to replay state and move + to the reply state. + + + + + + + Validate all expectations on a mock + + + + + The repository for this state + + + + + The proxy object for this state + + + + + Creates a new instance. + + The previous state for this method + + + + Add a method call for this state' mock. + + The invocation for this method + The method that was called + The arguments this method was called with + + + + Add a method call for this state' mock. + This allows derived method to cleanly get a the setupresult behavior while adding + their own. + + The invocation for this method + The method that was called + The arguments this method was called with + + + + Set the exception to throw when Verify is called. + This is used to report exception that may have happened but where caught in the code. + This way, they are reported anyway when Verify() is called. + + + + + Verify that this mock expectations have passed. + + + + + Verify that we can move to replay state and move + to the reply state. + + + + + Gets a mock state that match the original mock state of the object. + + + + + Gets the matching verify state for this state + + + + + Validate expectations on recorded methods, but in general completely ignoring them. + Similar to except that it would return a + when BackToRecord is called. + + + + + Initializes a new instance of the class. + + The previous state for this method + + + + Add a method call for this state' mock. + + The invocation for this method + The method that was called + The arguments this method was called with + + + + Gets a mock state that match the original mock state of the object. + + + + + Marker interface used to indicate that this is a partial mock. + + + + + Options for CallOriginalMethod + + + + + No expectation is created, the method will be called directly + + + + + Normal expectation is created, but when the method is later called, it will also call the original method + + + + + Adds optional new usage: + using(mockRepository.Record()) { + Expect.Call(mock.Method()).Return(retVal); + } + using(mockRepository.Playback()) { + // Execute code + } + N.B. mockRepository.ReplayAll() and mockRepository.VerifyAll() + calls are taken care of by Record/Playback + + + Creates proxied instances of types. + + + + + Delegate: CreateMockState + This is used internally to cleanly handle the creation of different + RecordMockStates. + + + + + This is used to record the last repository that has a method called on it. + + + + + this is used to get to the last proxy on this repository. + + + + + For mock delegates, maps the proxy instance from intercepted invocations + back to the delegate that was originally returned to client code, if any. + + + + + All the proxies in the mock repositories + + + + + + + + + + + + + + + + + Creates a new instance. + + + + + Move the repository to ordered mode + + + + + Move the repository to un-ordered mode + + + + + Creates a mock for the specified type. + + Type. + Arguments for the class' constructor, if mocking a concrete class + + + + Creates a mock from several types, with strict semantics. + Only may be a class. + + + + + Creates a mock from several types, with strict semantics. + Only may be a class. + + The main type to mock. + Extra interface types to mock. + Arguments for the class' constructor, if mocking a concrete class. + + + + Creates a mock from several types, with dynamic semantics. + Only may be a class. + + The main type to mock. + Extra interface types to mock. + + + + Creates a mock from several types, with dynamic semantics. + Only may be a class. + + The main type to mock. + Extra interface types to mock. + Arguments for the class' constructor, if mocking a concrete class. + + + + Creates a dynamic mock for the specified type. + + Type. + Arguments for the class' constructor, if mocking a concrete class + + + + Creates a mock object that defaults to calling the class methods. + + Type. + Arguments for the class' constructor. + + + + Creates a mock object that defaults to calling the class methods. + + Type. + Extra interface types to mock. + + + + Creates a mock object that defaults to calling the class methods. + + Type. + Extra interface types to mock. + Arguments for the class' constructor. + + + + Cause the mock state to change to replay, any further call is compared to the + ones that were called in the record state. + + the object to move to replay state + + + + Move the mocked object back to record state. + Will delete all current expectations! + + + + + Verify that all the expectations for this object were fulfilled. + + the object to verify the expectations for + + + + Get the method options for the last call on + mockedInstance. + + The mock object + Method options for the last call + + + + Maps an invocation proxy back to the mock object instance that was originally + returned to client code which might have been a delegate to this proxy. + + The mock object proxy from the intercepted invocation + The mock object + + + + This is provided to allow advance extention functionality, where Rhino Mocks standard + functionality is not enough. + + The type to mock + Delegate that create the first state of the mocked object (usualy the record state). + Additional types to be implemented, this can be only interfaces + optional arguments for the constructor + + + + + + Method: GetMockedObject + Get an IProxy from a mocked object instance, or throws if the + object is not a mock object. + + + + + Method: GetMockedObjectOrNull + Get an IProxy from a mocked object instance, or null if the + object is not a mock object. + + + + + Pops the recorder. + + + + + Pushes the recorder. + + New recorder. + + + + All the mock objects in this repository will be moved + to record state. + + + + + Replay all the mocks from this repository + + + + + Verify all the mocks from this repository + + + + + Set the exception to be thrown when verified is called. + + + + + Creates a mock for the spesified type. + + Arguments for the class' constructor, if mocking a concrete class + + + + Creates a dynamic mock for the specified type. + + Arguments for the class' constructor, if mocking a concrete class + + + + Creates a mock object from several types. + + + + + Create a mock object from several types with dynamic semantics. + + + + + Create a mock object from several types with partial semantics. + + + + + Create a mock object from several types with strict semantics. + + Extra interface types to mock. + Arguments for the class' constructor, if mocking a concrete class + + + + Create a mock object from several types with dynamic semantics. + + Extra interface types to mock. + Arguments for the class' constructor, if mocking a concrete class + + + + Create a mock object from several types with partial semantics. + + Extra interface types to mock. + Arguments for the class' constructor, if mocking a concrete class + + + + Create a mock object with from a class that defaults to calling the class methods + + Arguments for the class' constructor, if mocking a concrete class + + + + Create a stub object, one that has properties and events ready for use, and + can have methods called on it. It requires an explicit step in order to create + an expectation for a stub. + + The arguments for constructor. + + + + Create a stub object, one that has properties and events ready for use, and + can have methods called on it. It requires an explicit step in order to create + an expectation for a stub. + + The type. + The arguments for constructor. + + + + + + Generates a stub without mock repository + + The arguments for constructor. + + + + + + Generates the stub without mock repository + + The type. + The arguments for constructor. + + + + Gets the recorder. + + + + + + + Gets the replayer for this repository. + + + + + + + Gets the last proxy which had a method call. + + + + + Utility class for dealing with messing generics scenarios. + + + + + There are issues with trying to get this to work correctly with open generic types, since this is an edge case, + I am letting the runtime handle it. + + + + + Gets the real type, including de-constructing and constructing the type of generic + methods parameters. + + The type. + The invocation. + + + + + + Because we need to support complex types here (simple generics were handled above) we + need to be aware of the following scenarios: + List[T] and List[Foo[T]] + + + + + ExpectationsList + + + + + Dictionary + + + + + Dictionary class + + + + + Create a new instance of ProxyStateDictionary + + + + Interface to allows to call a method and immediatly get it's options. + + + + + Get the method options for the call + + The method call should go here, the return value is ignored + + + + Allows to call a method and immediatly get it's options. + + + + + Creates a new instance. + + + + + Get the method options for the call + + The method call should go here, the return value is ignored + + + + Allows to call a method and immediatly get it's options. + Set the expected number for the call to Any() + + + + + Creates a new instance. + + Proxy. + Mocked instance. + + + + Get the method options for the call + + The method call should go here, the return value is ignored + + + + This class is reponsible for taking a delegate and creating a wrapper + interface around it, so it can be mocked. + + + + + The scope for all the delegate interfaces create by this mock repositroy. + + + + + Gets a type with an "Invoke" method suitable for use as a target of the + specified delegate type. + + + + + + + + + Raise events for all subscribers for an event + + + + + Raise the event + + + + + Raise events for all subscribers for an event + + + + + Creates a new instance of EventRaiser + + + + Raise the event + + + + + Allows to define what would happen when a method + is called. + + + + + Set the return value for the method. + + The object the method will return + IRepeat that defines how many times the method will return this value + + + + Throws the specified exception when the method is called. + + Exception to throw + + + + Ignores the arguments for this method. Any argument will be matched + againt this method. + + + + + Add constraints for the method's arguments. + + + + + Set a callback method for the last call + + + + + Set a delegate to be called when the expectation is matched. + The delegate return value will be returned from the expectation. + + + + + Call the original method on the class, bypassing the mocking layers. + + + + + + + Call the original method on the class, optionally bypassing the mocking layers. + + + + + + + Use the property as a simple property, getting/setting the values without + causing mock expectations. + + + + + Get an event raiser for the last subscribed event. + + + + + Set the parameter values for out and ref parameters. + This is done using zero based indexing, and _ignoring_ any non out/ref parameter. + + + + + Documentation message for the expectation + + Message + + + + Better syntax to define repeats. + + + + + Allows to specify the number of time for method calls + + + + + Repeat the method twice. + + + + + Repeat the method once. + + + + + Repeat the method at least once, then repeat as many time as it would like. + + + + + Repeat the method any number of times. + This has special affects in that this method would now ignore orderring. + + + + + Set the range to repeat an action. + + Min. + Max. + + + + Set the amount of times to repeat an action. + + + + + This method must not appear in the replay state. + This has special affects in that this method would now ignore orderring. + + + + + Allows to define what would happen when a method + is called. + + + + + Creates a new instance. + + the repository for this expectation + the recorder for this proxy + the proxy for this expectation + Expectation. + + + + Add constraints for the method's arguments. + + + + + Set a callback method for the last call + + + + + Set a delegate to be called when the expectation is matched. + The delegate return value will be returned from the expectation. + + + + + Set the return value for the method. + + The object the method will return + IRepeat that defines how many times the method will return this value + + + + Throws the specified exception when the method is called. + + Exception to throw + + + + Ignores the arguments for this method. Any argument will be matched + againt this method. + + + + + Call the original method on the class, bypassing the mocking layers. + + + + + + + Call the original method on the class, optionally bypassing the mocking layers + + + + + + + Use the property as a simple property, getting/setting the values without + causing mock expectations. + + + + + Gets the event raiser for the last event + + + + + Set the parameter values for out and ref parameters. + This is done using zero based indexing, and _ignoring_ any non out/ref parameter. + + + + + Repeat the method twice. + + + + + Repeat the method once. + + + + + Repeat the method at least once, then repeat as many time as it would like. + + + + + This method must not appear in the replay state. + + + + + Documentation message for the expectation + + Message + + + + Repeat the method any number of times. + + + + + Set the range to repeat an action. + + Min. + Max. + + + + Set the amount of times to repeat an action. + + + + + Better syntax to define repeats. + + + + + This class will provide hash code for hashtables without needing + to call the GetHashCode() on the object, which may very well be mocked. + This class has no state so it is a singelton to avoid creating a lot of objects + that does the exact same thing. See flyweight patterns. + + + + + Get the hash code for a proxy object without calling GetHashCode() + on the object. + + + + + Compares two instances of mocked objects + + + + + Compare two mocked objects + + + + + The next hash code value for a mock object. + This is safe for multi threading. + + + + + The sole instance of + + + + Interface to find the repository of a mocked object + + + + + Return true if it should call the original method on the object + instead of pass it to the message chain. + + The method to call + + + + Register a method to be called on the object directly + + + + + Register a property on the object that will behave as a simple property + + + + + Check if the method was registered as a property method. + + + + + Do get/set on the property, according to need. + + + + + Do add/remove on the event + + + + + Get the subscribers of a spesific event + + + + + Gets the declaring type of the method, taking into acccount the possible generic + parameters that it was created with. + + + + + Clears the state of the object, remove original calls, property behavior, subscribed events, etc. + + + + + The unique hash code of this mock, which is not related + to the value of the GetHashCode() call on the object. + + + + + Gets the repository. + + + + + Gets the implemented types by this mocked object + + The implemented. + + + + This is a dummy type that is used merely to give DynamicProxy the proxy instance that + it needs to create IProxy's types. + + + + + Create a new instance of + + + + Return true if it should call the original method on the object + instead of pass it to the message chain. + + The method to call + + + + Register a method to be called on the object directly + + + + + Register a property on the object that will behave as a simple property + + + + + Check if the method was registered as a property method. + + + + + Do get/set on the property, according to need. + + + + + Do add/remove on the event + + + + + Get the subscribers of a spesific event + + + + + Gets the declaring type of the method, taking into acccount the possible generic + parameters that it was created with. + + + + + Clears the state of the object, remove original calls, property behavior, subscribed events, etc. + + + + + The unique hash code of this proxy, which is not related + to the value of the GetHashCode() call on the object. + + + + + Gets the repository. + + + + + Gets the implemented types by this mocked object + + The implemented. + + + + Range for expected method calls + + + + + Creates a new instance. + + Min. + Max. + + + + Return the string representation of this range. + + + + + Gets or sets the min. + + + + + + + Gets or sets the max. + + + + + + + Records all the expectations for a mock and + return a ReplayDynamicMockState when Replay() + is called. + + + + + Creates a new instance. + + Repository. + The proxy that generates the method calls + + + + Verify that we can move to replay state and move + to the reply state. + + + + + Gets a mock state that match the original mock state of the object. + + + + + Records all the expectations for a mock and + return a ReplayPartialMockState when Replay() + is called. + + + + + Creates a new instance. + + Repository. + The proxy that generates the method calls + + + + Verify that we can move to replay state and move + to the reply state. + + + + + Gets a mock state that match the original mock state of the object. + + + + + Options for special repeat option + + + + + This method can be called only as many times as the IMethodOptions.Expect allows. + + + + + This method should never be called + + + + + This method can be call any number of times + + + + + This method will call the original method + + + + + This method will call the original method, bypassing the mocking layer + + + + + This method will simulate simple property behavior + + + + + Validate all expectations on a mock and ignores calls to + any method that was not setup properly. + + + + + Creates a new instance. + + The previous state for this method + + + + Add a method call for this state' mock. + + The invocation for this method + The method that was called + The arguments this method was called with + + + + Gets a mock state that match the original mock state of the object. + + + + + Validate all expectations on a mock and ignores calls to + any method that was not setup properly. + + + + + Creates a new instance. + + The previous state for this method + + + + Add a method call for this state' mock. + + The invocation for this method + The method that was called + The arguments this method was called with + + + + Gets a mock state that match the original mock state of the object. + + + + + Summary description for RhinoInterceptor. + + + + + Creates a new instance. + + + + + Intercept a method call and direct it to the repository. + + + + + Validate arguments for methods + + + + + Validate that the passed argument is not null. + + The object to validate + The name of the argument + + If the obj is null, an ArgumentNullException with the passed name + is thrown. + + + + + Validate that the arguments are equal. + + Expected args. + Actual Args. + + + + This method is safe for use even if any of the objects is a mocked object + that override equals. + + + + + Throw an object already verified when accessed + + + + + Create a new instance of VerifiedMockState + + The previous mock state, used to get the initial record state + + + + Add a method call for this state' mock. + + The invocation for this method + The method that was called + The arguments this method was called with + + + + Verify that this mock expectations have passed. + + + + + Verify that we can move to replay state and move + to the reply state. + + + + + Gets a mock state that match the original mock state of the object. + + + + + Set the exception to throw when Verify is called. + This is used to report exception that may have happened but where caught in the code. + This way, they are reported anyway when Verify() is called. + + + + + Gets the matching verify state for this state + + + + + Get the options for the last method call + + + + + Records the actions on all the mocks created by a repository. + + + + + Records the specified call with the specified args on the mocked object. + + + + + Get the expectation for this method on this object with this arguments + + + + + This check the methods that were setup using the SetupResult.For() + or LastCall.Repeat.Any() and that bypass the whole expectation model. + + + + + Gets the all expectations for a mocked object and method combination, + regardless of the expected arguments / callbacks / contraints. + + Mocked object. + Method. + List of all relevant expectation + + + + Gets the all expectations for proxy. + + Mocked object. + List of all relevant expectation + + + + Removes all the repeatable expectations for proxy. + + Mocked object. + + + + Replaces the old expectation with the new expectation for the specified proxy/method pair. + This replace ALL expectations that equal to old expectations. + + Proxy. + Method. + Old expectation. + New expectation. + + + + Adds the recorder and turn it into the active recorder. + + Recorder. + + + + Moves to previous recorder. + + + + + Gets the recorded expectation or null. + + + + + Gets the next expected calls string. + + + + + Moves to parent recorder. + + + + + Set the expectation so it can repeat any number of times. + + + + + Removes the expectation from the recorder + + + + + Clear the replayer to call (and all its chain of replayers) + This also removes it from the list of expectations, so it will never be considered again + + + + + Get the expectation for this method on this object with this arguments + + + + + Gets a value indicating whether this instance has expectations that weren't satisfied yet. + + + true if this instance has expectations; otherwise, false. + + + + + Allows to set various options for the last method call on + a specified object. + If the method has a return value, it's recommended to use Expect + + + + + Allows to get an interface to work on the last call. + + The mocked object + Interface that allows to set options for the last method call on this object + + + + Set the return value for the method. + + The object the method will return + IRepeat that defines how many times the method will return this value + + + + Throws the specified exception when the method is called. + + Exception to throw + + + + Ignores the arguments for this method. Any argument will be matched + againt this method. + + + + + Add constraints for the method's arguments. + + + + + Set a callback method for the last call + + + + + Call the original method on the class, bypassing the mocking layers, for the last call. + + + + + Call the original method on the class, optionally bypassing the mocking layers, for the last call. + + + + + Set a delegate to be called when the expectation is matched. + The delegate return value will be returned from the expectation. + + + + + Gets an interface that will raise the last event when called. + + + + + Set the parameter values for out and ref parameters. + This is done using zero based indexing, and _ignoring_ any non out/ref parameter. + + + + + Documentation message for the expectation + + Message + + + + Use the property as a simple property, getting/setting the values without + causing mock expectations. + + + + + Better syntax to define repeats. + + + + + Base class for method recorders, handle delegating to inner recorder if needed. + + + + + List of the expected actions on for this recorder + The legal values are: + * Expectations + * Method Recorders + + + + + The current recorder. + + + + + The current replayer; + + + + + The parent recorder of this one, may be null. + + + + + This contains a list of all the replayers that should be ignored + for a spesific method call. A replayer gets into this list by calling + ClearReplayerToCall() on its parent. This list is Clear()ed on each new invocation. + + + + + All the repeatable methods calls. + + + + + Counts the recursion depth of the current expectation search stack + + + + + Creates a new instance. + + + + + Creates a new instance. + + Parent recorder. + + + + Records the specified call with the specified args on the mocked object. + + + + + Get the expectation for this method on this object with this arguments + + + + + Gets the all expectations for a mocked object and method combination, + regardless of the expected arguments / callbacks / contraints. + + Mocked object. + Method. + List of all relevant expectation + + + + Gets the all expectations for proxy. + + Mocked object. + List of all relevant expectation + + + + Replaces the old expectation with the new expectation for the specified proxy/method pair. + This replace ALL expectations that equal to old expectations. + + Proxy. + Method. + Old expectation. + New expectation. + + + + Remove the all repeatable expectations for proxy. + + Mocked object. + + + + Set the expectation so it can repeat any number of times. + + + + + Removes the expectation from the recorder + + + + + Adds the recorder and turn it into the active recorder. + + Recorder. + + + + Moves to previous recorder. + + + + + Moves to parent recorder. + + + + + Gets the recorded expectation or null. + + + + + Clear the replayer to call (and all its chain of replayers). + This also removes it from the list of expectations, so it will never be considered again + + + + + Get the expectation for this method on this object with this arguments + + + + + Gets the next expected calls string. + + + + + Handles the real getting of the recorded expectation or null. + + + + + Handle the real execution of this method for the derived class + + + + + Handle the real execution of this method for the derived class + + + + + Handle the real execution of this method for the derived class + + + + + Handle the real execution of this method for the derived class + + + + + Handle the real execution of this method for the derived class + + + + + Handle the real execution of this method for the derived class + + + + + Should this replayer be considered valid for this call? + + + + + This check the methods that were setup using the SetupResult.For() + or LastCall.Repeat.Any() and that bypass the whole expectation model. + + + + + Gets a value indicating whether this instance has expectations that weren't satisfied yet. + + + true if this instance has expectations; otherwise, false. + + + + + Handle the real execution of this method for the derived class + + + + + Unordered collection of method records, any expectation that exist + will be matched. + + + + + The parent recorder we have redirected to. + Useful for certain edge cases in orderring. + See: FieldProblem_Entropy for the details. + + + + + Creates a new instance. + + Parent recorder. + + + + Creates a new instance. + + + + + Records the specified call with the specified args on the mocked object. + + Mocked object. + Method. + Expectation. + + + + Get the expectation for this method on this object with this arguments + + Invocation for this method + Mocked object. + Method. + Args. + True is the call was recorded, false otherwise + + + + Gets the all expectations for a mocked object and method combination, + regardless of the expected arguments / callbacks / contraints. + + Mocked object. + Method. + List of all relevant expectation + + + + Gets the all expectations for proxy. + + Mocked object. + List of all relevant expectation + + + + Replaces the old expectation with the new expectation for the specified proxy/method pair. + This replace ALL expectations that equal to old expectations. + + Proxy. + Method. + Old expectation. + New expectation. + + + + Handle the real execution of this method for the derived class + + + + + Handles the real getting of the recorded expectation or null. + + + + + Handle the real execution of this method for the derived class + + + + + Gets the next expected calls string. + + + + + Create an exception for an unexpected method call. + + + + + Gets a value indicating whether this instance has expectations that weren't satisfied yet. + + + true if this instance has expectations; otherwise, false. + + + + + Ordered collection of methods, methods must arrive in specified order + in order to pass. + + + + + Creates a new instance. + + Parent recorder. + + + + Creates a new instance. + + + + + Handles the real getting of the recorded expectation or null. + + + + + Get the expectation for this method on this object with this arguments + + + + + Gets the next expected calls string. + + + + + Hold an expectation for a method call on an object + + + + + Creates a new instance. + + Proxy. + Method. + Expectation. + + + + Determains if the object equal to this instance + + Obj. + + + + + + Gets the hash code. + + + + + + + Gets the proxy. + + + + + + + Gets the method. + + + + + + + Gets the expectation. + + + + + + + Holds a pair of mocked object and a method + and allows to compare them against each other. + This allows us to have a distinction between mockOne.MyMethod() and + mockTwo.MyMethod()... + + + + + Creates a new instance. + + Proxy. + Method. + + + + Determains whatever obj equals to this instance. + ProxyMethodPairs are equals when they point to the same /instance/ of + an object, and to the same method. + + Obj. + + + + + + Gets the hash code. + + + + + + + Gets the proxy. + + + + + + + Gets the method. + + + + + + + Change the recorder from ordered to unordered and vice versa + + + + + Creates a new instance. + + + + + Disposes this instance. + + + + + Accessor for the current mocker + + + + + The current mocker + + + + + Used for [assembly: InternalsVisibleTo(RhinoMocks.StrongName)] + Used for [assembly: InternalsVisibleTo(RhinoMocks.NormalName)] + + + + + Strong name for the Dynamic Proxy assemblies. Used for InternalsVisibleTo specification. + + + + + Normal name for dynamic proxy assemblies. Used for InternalsVisibleTo specification. + + + + + Logs all method calls for methods + + + + + Setup method calls to repeat any number of times. + + + + + Get the method options and set the last method call to repeat + any number of times. + This also means that the method would transcend ordering + + + + + Get the method options for the last method call on the mockInstance and set it + to repeat any number of times. + This also means that the method would transcend ordering + + + + + Utility class for working with method calls. + + + + + Delegate to format the argument for the string representation of + the method call. + + + + + Return the string representation of a method call and its arguments. + + The method + The method arguments + Invocation of the method, used to get the generics arguments + Delegate to format the parameter + The string representation of this method call + + + + Return the string representation of a method call and its arguments. + + The invocation of the method, used to get the generic parameters + The method + The method arguments + The string representation of this method call + + + + Utility to get the default value for a type + + + + + The default value for a type. + Null for reference types and void + 0 for value types. + First element for enums + Note that we need to get the value even for opened generic types, such as those from + generic methods. + + Type. + The invocation. + the default value + + + + Allows easier access to MockRepository, works closely with Mocker.Current to + allow access to a context where the mock repository is automatially verified at + the end of the code block. + + + + + A method with no arguments and no return value that will be called under the mock context. + + + + + Initialize a code block where Mocker.Current is initialized. + At the end of the code block, all the expectation will be verified. + This overload will create a new MockRepository. + + The code that will be executed under the mock context + + + + Initialize a code block where Mocker.Current is initialized. + At the end of the code block, all the expectation will be verified. + This overload will create a new MockRepository. + + The mock repository to use, at the end of the code block, VerifyAll() will be called on the repository. + The code that will be executed under the mock context + + + + Wraps a reference that is passed + ByRef and provides indirect load/store support. + + + + + Summary description for NewArrayExpression. + + + + + + + + + Handles replication of custom attributes + + + + + Here we try to match a constructor argument to its value. + Since we can't get the values from the assembly, we use some heuristics to get it. + a/ we first try to match all the properties on the attributes by name (case insensitive) to the argument + b/ if we fail we try to match them by property type, with some smarts about convertions (i,e: can use Guid for string). + + + + + We have the following rules here. + Try to find a matching type, failing that, if the parameter is string, get the first property (under the assumption that + we can convert it. + + + + + Attributes can only accept simple types, so we return null for null, + if the value is passed as string we call to string (should help with converting), + otherwise, we use the value as is (enums, integer, etc). + + + + + Provides appropriate Ldc.X opcode for the type of primitive value to be loaded. + + + + + Provides appropriate Ldind.X opcode for + the type of primitive value to be loaded indirectly. + + + + + Inspect the base method for generic definitions + and set the return type and the parameters + accordingly + + + + + Emits a load opcode of the appropriate kind for a constant string or + primitive value. + + + + + + + + + Emits a load opcode of the appropriate kind for the constant default value of a + type, such as 0 for value types and null for reference types. + + + + + Emits a load indirect opcode of the appropriate type for a value or object reference. + Pops a pointer off the evaluation stack, dereferences it and loads + a value of the specified type. + + + + + + + + + Emits a store indirectopcode of the appropriate type for a value or object reference. + Pops a value of the specified type and a pointer off the evaluation stack, and + stores the value. + + + + + + + + + Summary description for PropertiesCollection. + + + + + Provides appropriate Stind.X opcode + for the type of primitive value to be stored indirectly. + + + + + Base class that exposes the common functionalities + to proxy generation. + + + TODO: + - Use the interceptor selector if provided + - Add tests and fixes for 'leaking this' problem + - Mixin support + + + + + Used by dinamically implement + + + + + + Generates a parameters constructor that initializes the proxy + state with just to make it non-null. + + This constructor is important to allow proxies to be XML serializable + + + + + If callbackMethod is null the InvokeOnTarget implementation + is just the code to throw an exception + + + + + + + + + + + + + + + + + + + If callbackMethod is null the InvokeOnTarget implementation + is just the code to throw an exception + + + + + + + + + + + + + + If true the invocation will implement the IChangeProxyTarget interface + + + + + + Generates the constructor for the nested class that extends + + + + + + + + + + + + + Improvement: this cache should be static. We should generate a + type constructor instead + + + + + Performs some basic screening and invokes the + to select methods. + + + + + + + + + + + Checks if the method is public or protected. + + + + + + + + + Checks if the method has the same signature as a method that was marked as + one that should generate a new vtable slot. + + + + + Initializes a new instance of the class. + + Type of the target. + The interfaces. + The options. + + + + + + + + Initializes a new instance of the class. + + The emitter. + The add method. + The remove method. + The attributes. + + + + + + + + Finds the type of the method on target. + + The method on interface. + Type of the proxy target. + if set to true will check implementation on mixins. + + + + + + Checks whether the given types are the same. This is + more complicated than it looks. + + + + + + + + + + + This is used by the ProxyObjectReference class durin de-serialiation, to know + which generator it should use + + + + + Handles the deserialization of proxies. + See here for more details: + http://groups.google.com/group/castle-project-devel/msg/fb5ef9656d050ba5 + + + + + Usefull for test cases + + + + + Assists in serializing instances of the generated proxy types so that they can be deserialized via . + + + + + Used to circumvent a serialization bug, where direct self references and directly held delegates are not deserialized correctly. + + + + + Used during the target type inspection process. + Implementors have a chance to interfere in the + proxy generation process + + + + + Invoked by the generation process to know if + the specified member should be proxied + + + + + + + + + + + Invoked by the generation process to notify that a + member wasn't marked as virtual. + + + + + + + + + Invoked by the generation process to notify + that the whole process is completed. + + + + + Abstracts the implementation of proxy constructions + + + + + Implementors should return a proxy for the specified type. + + The proxy base class. + The proxy generation options. + The generated proxy type. + + + + Implementors should return a proxy for the specified + type and interfaces. The interfaces must be only "mark" interfaces + + + + + + + + + + + + + Implementors should return a proxy for the specified + interface that 'proceeds' executions to the + specified target. + + + + + + + + + + + + + + + Implementors should return a proxy for the specified + interface that delegate all executions to the + specified interceptor(s). + + + + + + + + + + + + + Implementors should return a proxy for the specified + interface that delegate all executions to the + specified interceptor(s) and uses an instance of the interface + as their targets, rather than a class. All IInvocation's + should then implement IChangeProxyTarget. + + + + + + + + + + + Determines whether this assembly has internals visisble to dynamic proxy. + + The asm. + + + + Determines whether the specified method is internal. + + The method. + + true if the specified method is internal; otherwise, false. + + + + + Summary description for ModuleScope. + + + + + Avoid leaks caused by non disposal of generated types. + + + + + Keep track of generated types + + + + + Used to lock the module builder creation + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + if set to true saves the generated module. + + + + Saves the generated assembly. + + + + + ProxyBuilder that persists the generated type. + + + The saved assembly contains just the last generated type. + + + + + Initializes a new instance of the class. + + + + + The proxy generation options, note that this is a statefull class with regard to mixin. + + + + + Gets the default options + + The default. + + + + Initializes a new instance of the class. + + The hook. + + + + Initializes a new instance of the class. + + + + + This is required because a mixin may implement more than a single interface. + In order to track that, we register them all here, and when we instansiate the proxy, we pass it the + mixins implementations, where each interface has an object that implements it. + Example: + FooBar foo implements IFoo and IBar + + proxy ctor would be: + + public Proxy(IFoo, IBar, IInterceptor[], object target) + + And will be invoked with: + new Proxy(foo, foo, inteceptors, target); + + The mixin. + + + + Because we need to cache the types based on the mixed in mixins, we do the following here: + - Get all the mixin interfaces + - Sort them by full name + - Return them by position + + The idea is to have reproducable behavior for the case that mixins are registered in different orders. + This method is here because it is required + + + + + + + Initializes a new instance of the class. + + The builder. + + + + Initializes a new instance of the class. + + + + + Creates the class proxy. + + Type of the target. + The interfaces. + The interceptors. + + + + + + Creates the class proxy. + + Type of the target. + The interceptors. + The constructor args. + + + + + + + + + + + + + + + + + + Creates the class proxy. + + Type of the target. + The interfaces. + The options. + The constructor args. + The interceptors. + + + + + + Gets the proxy builder instance. + + The proxy builder. + + + + + + + + + + + + + + For interface proxies, this will point to the + on the target class + + + + + Base for Attributes that want to express lifestyle + chosen by the component. + + + + + Initializes a new instance of the class. + + The type. + + + + Gets or sets the lifestyle. + + The lifestyle. + + + + This attribute is usefull only when you want to register all components + on an assembly as a batch process. + By doing so, the batch register will look + for this attribute to distinguish components from other classes. + + + + + Associates a custom component with a component + + + + + Initializes a new instance of the class. + + Type of the component activator. + + + + Gets the type of the component activator. + + The type of the component activator. + + + + Specifies the proxying behavior for a component. + + + + + Initializes a new instance of the class. + + + + + Determines if the component requires a single interface proxy. + + + true if the component requires a single interface proxy. + + + + Marks as property to be skipped and not be wired + by the IoC container + + + + + Used to declare that a component wants interceptors acting on it. + + + + + Constructs the InterceptorAttribute pointing to + a key to a interceptor + + + + + + + Constructs the InterceptorAttribute pointing to + a service + + + + + + + Indicates that the target components wants a + singleton lifestyle. + + + + + Initializes a new instance of the class. + + + + + Indicates that the target components wants a + transient lifestyle. + + + + + Initializes a new instance of the class. + + + + + Indicates that the target components wants a + per thread lifestyle. + + + + + Initializes a new instance of the class. + + + + + Indicates that the target components wants a + per web request lifestyle. + + + + + Indicates that the target components wants a + pooled lifestyle. + + + + + Initializes a new instance of the class + using the default initial pool size (5) and the max pool size (15). + + + + + Initializes a new instance of the class. + + Initial size of the pool. + Max pool size. + + + + Gets the initial size of the pool. + + The initial size of the pool. + + + + Gets the maximum pool size. + + The size of the max pool. + + + + Indicates that the target components wants a + custom lifestyle. + + + + + Initializes a new instance of the class. + + The lifestyle handler. + + + + Gets the type of the lifestyle handler. + + The type of the lifestyle handler. + + + + New interface that is going to be used by DynamicProxy 2 + + + + + New interface that is going to be used by DynamicProxy 2 + + + + + Returns the concrete instantiation of , with any generic parameters bound to real types. + + The concrete instantiation of , or if not a generic method. + Can be slower than calling . + + + + Returns the concrete instantiation of , with any generic parameters bound to real types. + + The concrete instantiation of , or if not a generic method. + Can be slower than calling . + + + + + + + + + + The generic arguments of the method, or null if not a generic method. + + + + + + + + + For interface proxies, this will point to the + on the target class + + + + + Interceptors might implement this to receive the + ComponentModel on behalf of the component where the + interceptor is acting. + + + + + + + + + Get the proxy target (note that null is a valid target!) + + + + + + + Gets the interceptors for the proxy + + + + + + + Abstract representation of a vertex. + + + + + The nodes that dependes on this node + + + + + The nodes that this node depends + + + + + The node has not been visited yet + + + + + This node is in the process of being visited + + + + + This now was visited + + + + + Represents a collection of objects + which are guaranted to be unique + and holds a color for them + + + + + Holds a timestamp (integer) + for a given item + + + + + Returns the node at the specified index. + + The lookup index. + The node at the specified index. + + If the specified is greater than the + number of objects within the list. + + + + + Validates the specified index. + + The lookup index. + + If the index is invalid. + + + + + Lifecycle interface. If implemented by a component, + the method Initialized will be invoked by the container + before making the component available to the external world. + + + + + Implementors should perform any initialization logic. + + + + + Only called for components that + belongs to a pool when the component + comes back to the pool. + + + + + Implementors should perform any + initialization/clean up. + + + + + Interface for components that wish to be started by the container + + + + + Starts this instance. + + + + + Stops this instance. + + + + + Manages the instantiation of s. + + + + + Creates a new logger, getting the logger name from the specified type. + + + + + Creates a new logger. + + + + + Creates a new logger, getting the logger name from the specified type. + + + + + Creates a new logger. + + + + + Provides a factory that can produce either or + classes. + + + + + Creates a new extended logger, getting the logger name from the specified type. + + + + + Creates a new extended logger. + + + + + Creates a new extended logger, getting the logger name from the specified type. + + + + + Creates a new extended logger. + + + + + Creates a new extended logger, getting the logger name from the specified type. + + + + + Creates a new extended logger. + + + + + Creates a new extended logger, getting the logger name from the specified type. + + + + + Creates a new extended logger. + + + + + Gets the configuration file. + + i.e. log4net.config + + + + + + Gets the configuration file. + + i.e. log4net.config + + + + + + Summary description for ConsoleFactory. + + + + + NullLogFactory used when logging is turned off. + + + + + Creates an instance of ILogger with the specified name. + + Name. + + + + + + Creates an instance of ILogger with the specified name and LoggerLevel. + + Name. + Level. + + + + + + Creates outputing + to files. The name of the file is derived from the log name + plus the 'log' extension. + + + + + Manages logging. + + + This is a facade for the different logging subsystems. + It offers a simplified interface that follows IOC patterns + and a simplified priority/level/severity abstraction. + + + + + Logs a debug message. + + The message to log + + + + Logs a debug message. + + The exception to log + The message to log + + + + Logs a debug message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs a debug message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs a debug message. + + The exception to log + Format string for the message to log + Format arguments for the message to log + + + + Logs a debug message. + + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a debug message. + + The exception to log + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs an info message. + + The message to log + + + + Logs an info message. + + The exception to log + The message to log + + + + Logs an info message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs an info message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs an info message. + + The exception to log + Format string for the message to log + Format arguments for the message to log + + + + Logs an info message. + + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs an info message. + + The exception to log + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a warn message. + + The message to log + + + + Logs a warn message. + + The exception to log + The message to log + + + + Logs a warn message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs a warn message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs a warn message. + + The exception to log + Format string for the message to log + Format arguments for the message to log + + + + Logs a warn message. + + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a warn message. + + The exception to log + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs an error message. + + The message to log + + + + Logs an error message. + + The exception to log + The message to log + + + + Logs an error message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs an error message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs an error message. + + The exception to log + Format string for the message to log + Format arguments for the message to log + + + + Logs an error message. + + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs an error message. + + The exception to log + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a fatal message. + + The message to log + + + + Logs a fatal message. + + The exception to log + The message to log + + + + Logs a fatal message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs a fatal message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs a fatal message. + + The exception to log + Format string for the message to log + Format arguments for the message to log + + + + Logs a fatal message. + + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a fatal message. + + The exception to log + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a fatal error message. + + The Message + + + + Logs a fatal error message. + + The Message + The Exception + + + + Logs a fatal error message. + + Message format + Array of objects to write using format + + + + Create a new child logger. + The name of the child logger is [current-loggers-name].[passed-in-name] + + The Subname of this logger. + The New ILogger instance. + If the name has an empty element name. + + + + Determines if messages of priority "debug" will be logged. + + True if "debug" messages will be logged. + + + + Determines if messages of priority "info" will be logged. + + True if "info" messages will be logged. + + + + Determines if messages of priority "warn" will be logged. + + True if "warn" messages will be logged. + + + + Determines if messages of priority "error" will be logged. + + True if "error" messages will be logged. + + + + Determines if messages of priority "fatal" will be logged. + + True if "fatal" messages will be logged. + + + + Determines if messages of priority "fatalError" will be logged. + + True if "fatalError" messages will be logged. + + + + The Level Filtered Logger class. This is a base clase which + provides a LogLevel attribute and reroutes all functions into + one Log method. + + + + + Creates a new LevelFilteredLogger. + + + + + Keep the instance alive in a remoting scenario + + + + + + + Logs a debug message. + + The message to log + + + + Logs a debug message. + + The exception to log + The message to log + + + + Logs a debug message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs a debug message. + + The exception to log + Format string for the message to log + Format arguments for the message to log + + + + Logs a debug message. + + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a debug message. + + The exception to log + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a debug message. + + Message format + Array of objects to write using format + + + + Logs an info message. + + The message to log + + + + Logs an info message. + + The exception to log + The message to log + + + + Logs an info message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs an info message. + + The exception to log + Format string for the message to log + Format arguments for the message to log + + + + Logs an info message. + + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs an info message. + + The exception to log + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs an info message. + + Message format + Array of objects to write using format + + + + Logs a warn message. + + The message to log + + + + Logs a warn message. + + The exception to log + The message to log + + + + Logs a warn message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs a warn message. + + The exception to log + Format string for the message to log + Format arguments for the message to log + + + + Logs a warn message. + + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a warn message. + + The exception to log + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a warn message. + + Message format + Array of objects to write using format + + + + Logs an error message. + + The message to log + + + + Logs an error message. + + The exception to log + The message to log + + + + Logs an error message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs an error message. + + The exception to log + Format string for the message to log + Format arguments for the message to log + + + + Logs an error message. + + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs an error message. + + The exception to log + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs an error message. + + Message format + Array of objects to write using format + + + + Logs a fatal message. + + The message to log + + + + Logs a fatal message. + + The exception to log + The message to log + + + + Logs a fatal message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs a fatal message. + + The exception to log + Format string for the message to log + Format arguments for the message to log + + + + Logs a fatal message. + + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a fatal message. + + The exception to log + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a fatal message. + + Message format + Array of objects to write using format + + + + Logs a fatal error message. + + The Message + + + + Logs a fatal error message. + + The Message + The Exception + + + + Logs a fatal error message. + + Message format + Array of objects to write using format + + + + Implementors output the log content by implementing this method only. + Note that exception can be null + + + + + + + + + + + + + The LoggerLevel that this logger + will be using. Defaults to LoggerLevel.Off + + + + The name that this logger will be using. + Defaults to String.Empty + + + + Determines if messages of priority "debug" will be logged. + + + true if log level flags include the bit + + + + Determines if messages of priority "info" will be logged. + + + true if log level flags include the bit + + + + Determines if messages of priority "warn" will be logged. + + + true if log level flags include the bit + + + + Determines if messages of priority "error" will be logged. + + + true if log level flags include the bit + + + + Determines if messages of priority "fatal" will be logged. + + + true if log level flags include the bit + + + + Determines if messages of priority "fatal" will be logged. + + + true if log level flags include the bit + + + + The Logger sending everything to the standard output streams. + This is mainly for the cases when you have a utility that + does not have a logger to supply. + + + + + Creates a new ConsoleLogger with the Level + set to LoggerLevel.Debug and the Name + set to String.Empty. + + + + + Creates a new ConsoleLogger with the Name + set to String.Empty. + + The logs Level. + + + + Creates a new ConsoleLogger with the Level + set to LoggerLevel.Debug. + + The logs Name. + + + + Creates a new ConsoleLogger. + + The logs Name. + The logs Level. + + + + A Common method to log. + + The level of logging + The name of the logger + The Message + The Exception + + + + Returns a new ConsoleLogger with the name + added after this loggers name, with a dot in between. + + The added hierarchical name. + A new ConsoleLogger. + + + + The Logger using standart Diagnostics namespace. + + + + + Creates a logger based on . + + + + + + + + Creates a logger based on . + + + + + + + + + + + Creates a logger based on . + + + + + + + + + + + + + + Provides an interface that supports and + allows the storage and retrieval of Contexts. These are supported in + both log4net and NLog. + + + + + Exposes the Global Context of the extended logger. + + + + + Exposes the Thread Context of the extended logger. + + + + + Exposes the Thread Stack of the extended logger. + + + + + The Null Logger class. This is useful for implementations where you need + to provide a logger to a utility class, but do not want any output from it. + It also helps when you have a utility that does not have a logger to supply. + + + + + Creates a new NullLogger. + + + + + No-op. + + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + + + + Returns this NullLogger. + + Ignored + This ILogger instance. + + + + No-op. + + false + + + + No-op. + + false + + + + No-op. + + false + + + + No-op. + + false + + + + No-op. + + false + + + + No-op. + + false + + + + Returns empty context properties. + + + + + Returns empty context properties. + + + + + Returns empty context stacks. + + + + + Interface for Context Properties implementations + + + + This interface defines a basic property get set accessor. + + + Based on the ContextPropertiesBase of log4net, by Nicko Cadell. + + + + + + Gets or sets the value of a property + + + The value for the property with the specified key + + + + Gets or sets the value of a property + + + + + + The Stream Logger class. This class can stream log information + to any stream, it is suitable for storing a log file to disk, + or to a MemoryStream for testing your components. + + + This logger is not thread safe. + + + + + Creates a new StreamLogger with default encoding + and buffer size. Initial Level is set to Debug. + + + The name of the log. + + + The stream that will be used for logging, + seeking while the logger is alive + + + + + Creates a new StreamLogger with default buffer size. + Initial Level is set to Debug. + + + The name of the log. + + + The stream that will be used for logging, + seeking while the logger is alive + + + The encoding that will be used for this stream. + + + + + Creates a new StreamLogger. + Initial Level is set to Debug. + + + The name of the log. + + + The stream that will be used for logging, + seeking while the logger is alive + + + The encoding that will be used for this stream. + + + The buffer size that will be used for this stream. + + + + + Creates a new StreamLogger with + Debug as default Level. + + The name of the log. + The StreamWriter the log will write to. + + + + The WebLogger sends everything to the HttpContext.Trace + + + Trace must be enabled on the Asp.Net configuration file (web.config or machine.config) + + + + + Creates a new WebLogger with the priority set to DEBUG. + + + + + Creates a new WebLogger. + + The Log level typecode. + + + + Creates a new WebLogger. + + The Log name. + + + + Creates a new WebLogger. + + The Log name. + The Log level typecode. + + + + A Common method to log. + + The level of logging + The Log name. + The Message + The Exception + + + + Just returns this logger (WebLogger is not hierarchical). + + Ignored + This ILogger instance. + + + + Supporting Logger levels. + + + + + Logging will be off + + + + + Fatal logging level + + + + + Error logging level + + + + + Warn logging level + + + + + Info logging level + + + + + Debug logging level + + + + + Summary description for IConfiguration. + + + is a interface encapsulating a configuration node + used to retrieve configuration values. + + + + + Gets the value of the node and converts it + into specified . + + The + + The Default value returned if the convertion fails. + + The Value converted into the specified type. + + + + Gets the name of the node. + + + The Name of the node. + + + + + Gets the value of the node. + + + The Value of the node. + + + + + Gets an of + elements containing all node children. + + The Collection of child nodes. + + + + Gets an of the configuration attributes. + + + + + This is an abstract implementation + that deals with methods that can be abstracted away + from underlying implementations. + + + + AbstractConfiguration makes easier to implementers + to create a new version of + + + + + Gets the value of the node and converts it + into specified . + + The + + The Default value returned if the convertion fails. + + The Value converted into the specified type. + + + + Gets the name of the . + + + The Name of the . + + + + + Gets the value of . + + + The Value of the . + + + + + Gets all child nodes. + + The of child nodes. + + + + Gets node attributes. + + + All attributes of the node. + + + + + A collection of objects. + + + + + Creates a new instance of ConfigurationCollection. + + + + + Creates a new instance of ConfigurationCollection. + + + + + Creates a new instance of ConfigurationCollection. + + + + + Adds an . + + The to add. + + The index at which the new element was inserted. + + + + + Adds an array of . + + The Array of to add. + + + + Adds a . + + The to add. + + + + Copies the elements to a one-dimensional instance at the specified index. + + + The one-dimensional must have zero-based indexing. + + The zero-based index in array at which copying begins. + + + + Gets a value indicating whether the contains + in the collection. + + The to locate. + + if the is contained in the collection; + otherwise, . + + + + + Removes a specific from the + collection. + + The to remove from the collection. + + is not found in the collection. + + + + + Represents the entry at the specified index of the . + + + The zero-based index of the entry to locate in the collection. + + + The entry at the specified index of the collection. + + + is outside the valid range of indexes for the collection. + + + + + Summary description for MutableConfiguration. + + + + + Initializes a new instance of the class. + + The name. + + + + Enumeration used to mark the component's lifestyle. + + + + + No lifestyle specified. + + + + + Singleton components are instantiated once, and shared + between all clients. + + + + + Thread components have a unique instance per thread. + + + + + Transient components are created on demand. + + + + + Optimization of transient components that keeps + instance in a pool instead of always creating them. + + + + + Any other logic to create/release components. + + + + + PerWebRequest components are created once per Http Request + + + + + + + + + Represents the collection of information and + meta information collected about a component. + + + + Name (key) of the component + + + Service exposed + + + Implementation for the service + + + Extended properties + + + Lifestyle for the component + + + Custom lifestyle, if any + + + Custom activator, if any + + + Dependencies the kernel must resolve + + + All available constructors + + + All potential properties that can be setted by the kernel + + + Steps of lifecycle + + + External parameters + + + Configuration node associated + + + Interceptors associated + + + + Constructs a ComponentModel + + + + + Sets or returns the component key + + + + + Gets or sets the service exposed. + + The service. + + + + Gets or sets the component implementation. + + The implementation. + + + + Gets or sets a value indicating whether the component requires generic arguments. + + + true if generic arguments are required; otherwise, false. + + + + + Gets or sets the extended properties. + + The extended properties. + + + + Gets the constructors candidates. + + The constructors. + + + + Gets the properties set. + + The properties. + + + + Gets or sets the configuration. + + The configuration. + + + + Gets the lifecycle steps. + + The lifecycle steps. + + + + Gets or sets the lifestyle type. + + The type of the lifestyle. + + + + Gets or sets the strategy for + inspecting public properties + on the components + + + + + Gets or sets the custom lifestyle. + + The custom lifestyle. + + + + Gets or sets the custom component activator. + + The custom component activator. + + + + Gets the interceptors. + + The interceptors. + + + + Gets the parameter collection. + + The parameters. + + + + Dependencies are kept within constructors and + properties. Others dependencies must be + registered here, so the kernel (as a matter + of fact the handler) can check them + + + + + Represents a constructor of the component + that the container can use to initialize it properly. + + + + + Initializes a new instance of the class. + + The constructor info. + The dependencies. + + + + Gets the ConstructorInfo (from reflection). + + The constructor. + + + + Gets the dependencies this constructor candidate exposes. + + The dependencies. + + + + Collection of + + + + Adds the specified candidate. + + The candidate. + + + + Clears this instance. + + + + + Gets the fewer arguments candidate. + + The fewer arguments candidate. + + + + Represents a dependency (other component or a + fixed value available through external configuration). + + + + + Initializes a new instance of the class. + + The type. + The dependency key. + Type of the target. + if set to true [is optional]. + + + + Returns a that represents the current . + + + A that represents the current . + + + + + Serves as a hash function for a particular type, suitable + for use in hashing algorithms and data structures like a hash table. + + + A hash code for the current . + + + + + Determines whether the specified is equal to the current . + + The to compare with the current . + + if the specified is equal to the + current ; otherwise, . + + + + + Gets or sets the type of the dependency. + + The type of the dependency. + + + + Gets or sets the dependency key. + + The dependency key. + + + + Gets the type of the target. + + The type of the target. + + + + Gets or sets whether this dependency is optional. + + + true if this dependency is optional; otherwise, false. + + + + + Collection of . + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The dependencies. + + + + Initializes a new instance of the class. + + The dependencies. + + + + Adds the specified model. + + The model. + + + + Removes the specified model. + + The model. + + + + Clears this instance. + + + + + Determines whether this collection contains the the specified model. + + The model. + + true if the collection contains the specified model; otherwise, false. + + + + + Represents an reference to a Interceptor component. + + + + + Initializes a new instance of the class. + + The component key. + + + + Initializes a new instance of the class. + + Type of the service. + + + + Gets the type of the service. + + The type of the service. + + + + Gets the interceptor component key. + + The component key. + + + + Gets the type of the reference. + + The type of the reference. + + + + Collection of + + + + Adds the specified interceptor. + + The interceptor. + + + + Adds the the specified interceptor as the first. + + The interceptor. + + + + Adds the the specified interceptor as the last. + + The interceptor. + + + + Inserts the specified interceptor at the specified index. + + The index. + The interceptor. + + + + When implemented by a class, copies the elements of + the to an , starting at a particular index. + + The one-dimensional that is the destination of the elements copied from . The must have zero-based indexing. + The zero-based index in at which copying begins. + + is . + + is less than zero. + + + is multidimensional. + -or- + + is equal to or greater than the length of . + -or- + The number of elements in the source is greater than the available space from to the end of the destination . + + The type of the source cannot be cast automatically to the type of the destination . + + + + Returns an enumerator that can iterate through a collection. + + + An + that can be used to iterate through the collection. + + + + + Gets a value indicating whether this instance has interceptors. + + + true if this instance has interceptors; otherwise, false. + + + + + Gets the number of + elements contained in the . + + + + + + + Gets an object that + can be used to synchronize access to the . + + + + + + + Gets a value + indicating whether access to the is synchronized + (thread-safe). + + + + + + + Represents a collection of ordered lifecycle steps. + + + + + Initializes a new instance of the class. + + + + + Returns all steps for the commission phase + + + + + + + Returns all steps for the decommission phase + + + + + + + Adds a step to the commission or decomission phases. + + + + + + + + + Copies the elements of + the to an , starting at a particular index. + + The one-dimensional that is the destination of the elements copied from . The must have zero-based indexing. + The zero-based index in at which copying begins. + + is . + + is less than zero. + + + is multidimensional. + -or- + + is equal to or greater than the length of . + -or- + The number of elements in the source is greater than the available space from to the end of the destination . + + The type of the source cannot be cast automatically to the type of the destination . + + + + Returns an enumerator that can iterate through a collection. + + + An + that can be used to iterate through the collection. + + + + + Gets a value indicating whether this instance has commission steps. + + + true if this instance has commission steps; otherwise, false. + + + + + Gets a value indicating whether this instance has decommission steps. + + + true if this instance has decommission steps; otherwise, false. + + + + + Gets the number of + elements contained in the . + + + + + + + Gets an object that + can be used to synchronize access to the . + + + + + + + Gets a value + indicating whether access to the is synchronized + (thread-safe). + + + + + + + Represents meta information associated with a method + (not yet defined) + + + + + Initializes a new instance of the class. + + The config node. + + + + Gets the config node. + + The config node. + + + + Collection of + + + + Adds the specified model. + + The model. + + + + Gets the method info2 model. + + The method info2 model. + + + + Represents a parameter. Usually the parameter + comes from the external world, ie, an external configuration. + + + + + Initializes a new instance of the class. + + The name. + The value. + + + + Initializes a new instance of the class. + + The name. + The value. + + + + Gets the name. + + The name. + + + + Gets the value. + + The value. + + + + Gets the config value. + + The config value. + + + + Collection of + + + + Initializes a new instance of the class. + + + + + Adds the specified name. + + The name. + The value. + + + + Adds the specified name. + + The name. + The config node. + + + + Determines whether this collection contains the specified key. + + The key. + + true if yes; otherwise, false. + + + + + Adds the specified key. + + + Not implemented + + The key. + The value. + + + + Clears this instance. + + + Not implemented + + + + + Removes the specified key. + + The key. + + Not implemented + + + + + Copy the content to the specified array + + target array + target index + + Not implemented + + + + + Returns an enumerator that can iterate through a collection. + + + An + that can be used to iterate through the collection. + + + + + Gets the keys. + + The keys. + + Not implemented + + + + + Gets the values. + + The values. + + Not implemented + + + + + Gets a value indicating whether this instance is read only. + + + true if this instance is read only; otherwise, false. + + + + + Gets a value indicating whether this instance is fixed size. + + + true if this instance is fixed size; otherwise, false. + + + + + Gets the with the specified key. + + + + + + + Gets the count. + + The count. + + + + Gets the sync root. + + The sync root. + + + + Gets a value indicating whether this instance is synchronized. + + + true if this instance is synchronized; otherwise, false. + + + + + Represents a property and the respective dependency. + + + + + Initializes a new instance of the class. + + The property info. + The dependency. + + + + Gets the property. + + The property. + + + + Gets the dependency. + + The dependency. + + + + Collection of + + + + Adds the specified property. + + The property. + + + + Clears this instance. + + + + + Finds a PropertySet the by PropertyInfo. + + The info. + + + + + + Represents a 'streamable' resource. Can + be a file, a resource in an assembly. + + + + + Returns a reader for the stream + + + It's up to the caller to dispose the reader. + + + + + + + Returns a reader for the stream + + + It's up to the caller to dispose the reader. + + + + + + + + + Returns an instance of + created according to the relativePath + using itself as the root. + + + + + + + + + + + Only valid for resources that + can be obtained through relative paths + + + + + + + + + Do not allow closing and disposal of the + underlying . + + + + + Depicts the contract for resource factories. + + + + + Used to check whether the resource factory + is able to deal with the given resource + identifier. + + + Implementors should return true + only if the given identificator is supported + by the resource factory + + + + + + + + + Creates an instance + for the given resource identifier + + + + + + + + + Creates an instance + for the given resource identifier + + + + + + + + + + + + + + + + + + + + + + + Adapts a static string content as an + + + + Enable access to files on network shares + + + + + Defines that the implementation wants a + in order to + access other components. The creator must be aware + that the component might (or might not) implement + the interface. + + + Used by Castle Project components to, for example, + gather logging factories + + + + \ No newline at end of file diff --git a/tools/rhino/Rhino.jpg b/tools/rhino/Rhino.jpg new file mode 100644 index 000000000..cead83cbe Binary files /dev/null and b/tools/rhino/Rhino.jpg differ