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: Creates SELECT statement to query information schema table.
docstr_tok: ["Creates","SELECT","statement","to","query","information","schema","table","."]
code: def create_information_schema_query(
      cls,
      tables: list[DbTableMeta],
      normalize_name: Callable[[str], str],
      is_cross_db: bool,
      information_schema_columns: list[str],
      information_schema_table: str,
      is_uppercase_names: bool,
      use_flat_cross_db_query: bool,
      database: str | None = None,
      sqlalchemy_engine: Engine | None = None,
  ) -> str:
      """Creates SELECT statement to query information schema table."""
      tables_hierarchy = cls._get_tables_hierarchy(
          tables,
          normalize_name=normalize_name,
          database=database,
          is_cross_db=is_cross_db,
      )
      return create_information_schema_query(
          columns=information_schema_columns,
          information_schema_table_name=information_schema_table,
          tables_hierarchy=tables_hierarchy,
          use_flat_cross_db_query=use_flat_cross_db_query,
          uppercase_names=is_uppercase_names,
          sqlalchemy_engine=sqlalchemy_engine,
      )
  
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 9 for calling the SQLParser obj's underlying member method code with example usage: obj.create_information_schema_query(cls, tables, normalize_name, is_cross_db, information_schema_columns, information_schema_table, is_uppercase_names, use_flat_cross_db_query, database, sqlalchemy_engine) and returns: create_information_schema_query