docs: def _get_fields(self, table_name, **kwargs):
          """return all the fields for the given table"""
          ret = {}
          query_str = 'PRAGMA table_info({})'.format(self._normalize_table_name(table_name))
          fields = self._query(query_str, **kwargs)
          #pout.v([dict(d) for d in fields])
  
          query_str = 'PRAGMA foreign_key_list({})'.format(self._normalize_table_name(table_name))
          fks = {f["from"]: f for f in self._query(query_str, **kwargs)}
          #pout.v([dict(d) for d in fks.values()])
  
          pg_types = {
              "INTEGER": int,
              "BIGINT": long,
              "DOUBLE PRECISION": float,
              "FLOAT": float,
              "REAL": float,
              "NUMERIC": decimal.Decimal,
              "BOOLEAN": bool,
              "DATE": datetime.date,
              "TIMESTAMP": datetime.datetime,
              "CHARACTER": str,
              "VARCHAR": str,
              "TEXT": str,
              "BLOB": bytearray,
          }
  
          # the rows we can set: field_type, name, field_required, min_size, max_size,
          #   size, unique, pk, <foreign key info>
          # These keys will roughly correspond with schema.Field
          # TODO -- we could actually use "type" to get the size because SQLite returns
          # a value like VARCHAR[32]
          for row in fields:
              field = {
                  "name": row["name"],
                  "field_required": bool(row["notnull"]) or bool(row["pk"]),
                  "pk": bool(row["pk"]),
              }
  
              for tname, ty in pg_types.items():
                  if row["type"].startswith(tname):
                      field["field_type"] = ty
                      break
  
              if field["pk"] and field["field_type"] is int:
                  # we compensate for SQLite internally setting pk to int
                  field["field_type"] = long
  
              if row["name"] in fks:
                  field["schema_table_name"] = fks[row["name"]]["table"]
                  field["ref_table_name"] = fks[row["name"]]["table"]
  
              ret[field["name"]] = field
  
          return ret