codecov[bot]: # [Codecov](https://codecov.io/gh/reata/sqllineage/pull/45?src=pr&el=h1) Report
> Merging [#45](https://codecov.io/gh/reata/sqllineage/pull/45?src=pr&el=desc) into [master](https://codecov.io/gh/reata/sqllineage/commit/27346e0d6488cd5b3f9205543da78b973ce5d274&el=desc) will **not change** coverage by `%`.
> The diff coverage is `100.00%`.

[![Impacted file tree graph](https://codecov.io/gh/reata/sqllineage/pull/45/graphs/tree.svg?width=650&height=150&src=pr&token=latkaw2Lx6)](https://codecov.io/gh/reata/sqllineage/pull/45?src=pr&el=tree)

```diff
@@           Coverage Diff           @@
##           master      #45   +/-   ##
=======================================
  Coverage   81.96%   81.96%           
=======================================
  Files           1        1           
  Lines         122      122           
=======================================
  Hits          100      100           
  Misses         22       22           
```


| [Impacted Files](https://codecov.io/gh/reata/sqllineage/pull/45?src=pr&el=tree) | Coverage Δ | |
|---|---|---|
| [sqllineage/core.py](https://codecov.io/gh/reata/sqllineage/pull/45/diff?src=pr&el=tree#diff-c3FsbGluZWFnZS9jb3JlLnB5) | `81.96% <100.00%> (ø)` | |

------

[Continue to review full report at Codecov](https://codecov.io/gh/reata/sqllineage/pull/45?src=pr&el=continue).
> **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta)
> `Δ = absolute <relative> (impact)`, `ø = not affected`, `? = missing data`
> Powered by [Codecov](https://codecov.io/gh/reata/sqllineage/pull/45?src=pr&el=footer). Last update [27346e0...e0f284c](https://codecov.io/gh/reata/sqllineage/pull/45?src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).

diff --git a/sqllineage/core.py b/sqllineage/core.py
index 059f40e..5ba4481 100644
--- a/sqllineage/core.py
+++ b/sqllineage/core.py
@@ -54,11 +54,11 @@ Target Tables:
 
     @property
     def source_tables(self) -> Set[str]:
-        return self._source_tables
+        return {t.lower() for t in self._source_tables}
 
     @property
     def target_tables(self) -> Set[str]:
-        return self._target_tables
+        return {t.lower() for t in self._target_tables}
 
     def _extract_from_DML(self, token: Token) -> None:
         source_table_token_flag = target_table_token_flag = temp_table_token_flag = False

case-sensitive parsing
```
insert overwrite table tab_a
select * from tab_b
union all
select * from TAB_B
```

here tab_b and TAB_B will be parsed as two different tables.
diff --git a/tests/test_others.py b/tests/test_others.py
index 38956f1..f5f71f6 100644
--- a/tests/test_others.py
+++ b/tests/test_others.py
@@ -6,6 +6,13 @@ def test_use():
     helper("USE db1")
 
 
+def test_table_name_case():
+    helper("""insert overwrite table tab_a
+select * from tab_b
+union all
+select * from TAB_B""", {"tab_b"}, {"tab_a"})
+
+
 def test_create():
     helper("CREATE TABLE tab1 (col1 STRING)", None, {"tab1"})
 

pip install -e .
parse_log_pytest
pytest
pytest
3.6
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
attrs @ file:///opt/conda/conda-bld/attrs_1642510447205/work
certifi==2021.5.30
importlib-metadata @ file:///tmp/build/80754af9/importlib-metadata_1631916693255/work
iniconfig @ file:///home/linux1/recipes/ci/iniconfig_1610983019677/work
more-itertools @ file:///tmp/build/80754af9/more-itertools_1637733554872/work
packaging @ file:///tmp/build/80754af9/packaging_1637314298585/work
pluggy @ file:///tmp/build/80754af9/pluggy_1615976315926/work
py @ file:///opt/conda/conda-bld/py_1644396412707/work
pyparsing @ file:///tmp/build/80754af9/pyparsing_1635766073266/work
pytest==6.2.4
-e git+https://github.com/reata/sqllineage.git@27346e0d6488cd5b3f9205543da78b973ce5d274#egg=sqllineage
sqlparse==0.3.1
toml @ file:///tmp/build/80754af9/toml_1616166611790/work
typing_extensions @ file:///opt/conda/conda-bld/typing_extensions_1647553014482/work
zipp @ file:///tmp/build/80754af9/zipp_1633618647012/work

name: sqllineage
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - attrs=21.4.0=pyhd3eb1b0_0
  - ca-certificates=2025.2.25=h06a4308_0
  - certifi=2021.5.30=py36h06a4308_0
  - importlib-metadata=4.8.1=py36h06a4308_0
  - importlib_metadata=4.8.1=hd3eb1b0_0
  - iniconfig=1.1.1=pyhd3eb1b0_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.3=he6710b0_2
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - more-itertools=8.12.0=pyhd3eb1b0_0
  - ncurses=6.4=h6a678d5_0
  - openssl=1.1.1w=h7f8727e_0
  - packaging=21.3=pyhd3eb1b0_0
  - pip=21.2.2=py36h06a4308_0
  - pluggy=0.13.1=py36h06a4308_0
  - py=1.11.0=pyhd3eb1b0_0
  - pyparsing=3.0.4=pyhd3eb1b0_0
  - pytest=6.2.4=py36h06a4308_2
  - python=3.6.13=h12debd9_1
  - readline=8.2=h5eee18b_0
  - setuptools=58.0.4=py36h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - toml=0.10.2=pyhd3eb1b0_0
  - typing_extensions=4.1.1=pyh06a4308_0
  - wheel=0.37.1=pyhd3eb1b0_0
  - xz=5.6.4=h5eee18b_1
  - zipp=3.6.0=pyhd3eb1b0_0
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - sqlparse==0.3.1
prefix: /opt/conda/envs/sqllineage

tests/test_others.py::test_table_name_case
tests/test_others.py::test_use tests/test_others.py::test_create tests/test_others.py::test_create_if_not_exist tests/test_others.py::test_create_as tests/test_others.py::test_create_like tests/test_others.py::test_create_select tests/test_others.py::test_create_after_drop tests/test_others.py::test_drop tests/test_others.py::test_drop_with_comment tests/test_others.py::test_drop_after_create tests/test_others.py::test_drop_tmp_tab_after_create tests/test_others.py::test_alter_table_rename tests/test_others.py::test_alter_target_table_name tests/test_others.py::test_truncate_table tests/test_others.py::test_delete_from_table tests/test_others.py::test_split_statements tests/test_others.py::test_split_statements_with_heading_and_ending_new_line tests/test_others.py::test_split_statements_with_comment tests/test_others.py::test_split_statements_with_show_create_table tests/test_others.py::test_split_statements_with_desc
sqllineage/core.py
sqllineage/core.py