class_docstr: Interface for openlineage-sql.
  
  :param dialect: dialect specific to the database
  :param default_schema: schema applied to each table with no schema parsed
class_docstr_tok: ["Interface","for","openlineage-sql",".",":","param","dialect",":","dialect","specific","to","the","database",":","param","default_schema",":","schema","applied","to","each","table","with","no","schema","parsed"]
docstr: Parse schemas for input and output tables.
docstr_tok: ["Parse","schemas","for","input","and","output","tables","."]
code: def parse_table_schemas(
      self,
      hook: BaseHook,
      inputs: list[DbTableMeta],
      outputs: list[DbTableMeta],
      database_info: DatabaseInfo,
      namespace: str = DEFAULT_NAMESPACE,
      database: str | None = None,
      sqlalchemy_engine: Engine | None = None,
  ) -> tuple[list[Dataset], ...]:
      """Parse schemas for input and output tables."""
      database_kwargs: GetTableSchemasParams = {
          "normalize_name": database_info.normalize_name_method,
          "is_cross_db": database_info.is_information_schema_cross_db,
          "information_schema_columns": database_info.information_schema_columns,
          "information_schema_table": database_info.information_schema_table_name,
          "is_uppercase_names": database_info.is_uppercase_names,
          "database": database or database_info.database,
          "use_flat_cross_db_query": database_info.use_flat_cross_db_query,
      }
      return get_table_schemas(
          hook,
          namespace,
          self.default_schema,
          database or database_info.database,
          self.create_information_schema_query(
              tables=inputs,
              sqlalchemy_engine=sqlalchemy_engine,
              **database_kwargs,
          )
          if inputs
          else None,
          self.create_information_schema_query(
              tables=outputs,
              sqlalchemy_engine=sqlalchemy_engine,
              **database_kwargs,
          )
          if outputs
          else None,
      )
  
imports: from __future__ import annotations
  from typing import TYPE_CHECKING, Callable
  import sqlparse
  from attrs import define
  from openlineage.client.facet import BaseFacet, ColumnLineageDatasetFacet, ColumnLineageDatasetFacetFieldsAdditional, ColumnLineageDatasetFacetFieldsAdditionalInputFields, ExtractionError, ExtractionErrorRunFacet, SqlJobFacet
  from openlineage.common.sql import DbTableMeta, SqlMeta, parse
  from airflow.providers.openlineage.extractors.base import OperatorLineage
  from airflow.providers.openlineage.utils.sql import TablesHierarchy, create_information_schema_query, get_table_schemas
  from airflow.typing_compat import TypedDict
label_desc: Use image node_id 3 for calling the SQLParser obj's underlying member method code with example usage: obj.parse_table_schemas(hook, inputs, outputs, database_info, namespace, database, sqlalchemy_engine) and returns: get_table_schemas