code: def schema(self):
          
          def _info2columns(info):
              return tuple((column["name"], column["type"]) for column in info)
  
          def _table2tuple(table):
              return (table, _info2columns(self.table_info(table)))
  
          return [_table2tuple(table) for table in self.tables]
docs: Returns the schema of all tables.
  
          For each table, return the name, and a list of tuples
          representing the columns. Each column tuple consists of a
          (name, type) pair. Note that additional metadata, such as
          whether a column may be null, or whether a column is a primary
          key, is not returned.
  
          Example:
  
              >>> db.schema
              [("bar", (("id", "integer"), ("name", "table"))]
  
          Returns:
  
              list of tuples: Each tuple has the format (name, columns), where
                "columns" is a list of tuples of the form (name, type).