title: SQLAlchemy Boolean vs BOOLEAN
body: <p>I can see that <code>BOOLEAN</code> overrides <code>__visit_name__</code> </p>
  
  <pre><code>class BOOLEAN(Boolean):
      __visit_name__ = 'BOOLEAN'
  </code></pre>
  
  <p>that controls visitor's method chosen by the dispatcher</p>
  
  <pre><code>def _compiler_dispatch(self, visitor, **kw):
      visit_attr = 'visit_%s' % self.__visit_name__
      try:
          meth = getattr(visitor, visit_attr)
  </code></pre>
  
  <p>In the case of MS SQL, the visitor is <code>MSSQLCompiler</code>, which derives from <code>GenericTypeCompiler</code>. Now, <code>MSSQLCompiler</code> overrides <code>visit_boolean</code>:</p>
  
  <pre><code>def visit_boolean(self, type_, **kw):
      return self.visit_BIT(type_)
  </code></pre>
  
  <p>But it does not override <code>visit_BOOLEAN</code>, so  column type <code>Boolean</code> resolves to "BIT", and <code>BOOLEAN</code> (via the superclass) resolves to "BOOLEAN", which is not a valid MS SQL type.</p>
  
  <p>Why this inconsistency? Does <code>MSSQLCompiler</code> need to override <code>visit_BOOLEAN</code>, or is there something I am missing? What is the difference, conceptually, between <code>Boolean</code> and <code>BOOLEAN</code> types?</p>