sql-glider 0.1.7__py3-none-any.whl → 0.1.9__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sql-glider
3
- Version: 0.1.7
3
+ Version: 0.1.9
4
4
  Summary: SQL Utility Toolkit for better understanding, use, and governance of your queries in a native environment.
5
5
  Project-URL: Homepage, https://github.com/rycowhi/sql-glider/
6
6
  Project-URL: Repository, https://github.com/rycowhi/sql-glider/
@@ -1,5 +1,5 @@
1
1
  sqlglider/__init__.py,sha256=gDf7s52dMcX7JuCZ1SLawcB1vb3U0yJCohu9RQAATBY,125
2
- sqlglider/_version.py,sha256=szvPIs2C82UunpzuvVg3MbF4QhzbBYTsVJ8DmPfq6_E,704
2
+ sqlglider/_version.py,sha256=ib8ckvf-NNDfacXd8unW0p5cf-gl57XyQvjoEMc_pvc,704
3
3
  sqlglider/cli.py,sha256=9sweHRVLk2iBSzCzT2Gcj8y1g1XKzq26iApQsMaFbx4,51786
4
4
  sqlglider/global_models.py,sha256=2vyJXAuXOsXQpE-D3F0ejj7eR9z0nDWFjTkielhzM8k,356
5
5
  sqlglider/catalog/__init__.py,sha256=2PqFPyzFXJ14FpSUcBmVK2L-a_ypWQHAbHFHxLDk_LE,814
@@ -11,13 +11,13 @@ sqlglider/dissection/analyzer.py,sha256=-GD3-lTbfBthq1BW6HiDjvJx2y4LDmnUVHIVIb0H
11
11
  sqlglider/dissection/formatters.py,sha256=M7gsmTNljRIeLIRv4D0vHvqJVrTqWSpsg7vem83zSzY,7302
12
12
  sqlglider/dissection/models.py,sha256=RRD3RIteqbUBY6e-74skKDvMH3qeAUaqA2sFcrjP5GQ,3618
13
13
  sqlglider/graph/__init__.py,sha256=4DDdrPM75CmeQWt7wHdBsjCm1s70BHGLYdijIbaUEKY,871
14
- sqlglider/graph/builder.py,sha256=nIddZjGerklkB8NbhVPx2nsMqFI5gZCrFVKVnxuCgms,11944
14
+ sqlglider/graph/builder.py,sha256=0ASA749b_FkcKMEVWiijAJP1QKt54ICY7VXxUuo3-y0,11953
15
15
  sqlglider/graph/merge.py,sha256=uUZlm4BN3S9gRL66Cc2mzhbtuh4SVAv2n4cN4eUEQBU,4077
16
16
  sqlglider/graph/models.py,sha256=EYmjv_WzDSNp_WfhJ6H-qBIOkAcoNKS7GRUryfKrHuY,9330
17
17
  sqlglider/graph/query.py,sha256=LHU8Cvn7ZPPSEnqdDn2pF8f1_LQjIvNIrZqs8cFlb6U,9433
18
- sqlglider/graph/serialization.py,sha256=7JJo31rwSlxnDhdqdTJdK4Dr_ZcSYetXfx3_CmndSac,2662
18
+ sqlglider/graph/serialization.py,sha256=vMXn7s35jA499e7l90vNVaJE_3QR_VHf3rEfQ9ZlgTQ,2781
19
19
  sqlglider/lineage/__init__.py,sha256=llXMeI5_PIZaiBo8tKk3-wOubF4m_6QBHbn1FtWxT7k,256
20
- sqlglider/lineage/analyzer.py,sha256=Vfh0g9xVEEUkQ87KZlCcZVPltDJ6Uos67PBtDyQ_i8U,64679
20
+ sqlglider/lineage/analyzer.py,sha256=4VoJAsNRpz8T4sifF9VW4_SkSSU-8GtcBdDORCfPV_0,65581
21
21
  sqlglider/lineage/formatters.py,sha256=_Y9wcTX4JXn1vVnZ1xI656g1FF2rMjcAVc-GHjbd9QA,10389
22
22
  sqlglider/templating/__init__.py,sha256=g3_wb6rSDI0usq2UUMDpn-J5kVwlAw3NtLdwbxL6UHs,1435
23
23
  sqlglider/templating/base.py,sha256=y5bWAW7qXl_4pPyo5KycfHwNVvt1-7slZ63DAsvTE1s,2902
@@ -27,8 +27,8 @@ sqlglider/templating/variables.py,sha256=5593PtLBcOxsnMCSRm2pGAD5I0Y9f__VV3_J_Hf
27
27
  sqlglider/utils/__init__.py,sha256=KGp9-UzKz_OFBOTFoSy-g-NXDZsvyWXG_9-1zcC6ePE,276
28
28
  sqlglider/utils/config.py,sha256=iNJgSXFw3pmL2MCdvW3SJp4X2T3AQP2QyQuXIXT-6H0,4761
29
29
  sqlglider/utils/file_utils.py,sha256=5_ff28E0r1R7emZzsOnRuHd-7zIX6873eyr1SuPEr4E,1093
30
- sql_glider-0.1.7.dist-info/METADATA,sha256=Ng-ht-OuykiQWWUjD364MekChFKLNFW8qYkEIxcYZuc,28445
31
- sql_glider-0.1.7.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
32
- sql_glider-0.1.7.dist-info/entry_points.txt,sha256=HDuakHqHS5C0HFKsMIxMYmDU7-BLBGrnIJcYaVRu-s0,251
33
- sql_glider-0.1.7.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
34
- sql_glider-0.1.7.dist-info/RECORD,,
30
+ sql_glider-0.1.9.dist-info/METADATA,sha256=LOSe-vTRzfkFsnas1cHSFgnRJZL3bO34ujqLcUWMN1Q,28445
31
+ sql_glider-0.1.9.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
32
+ sql_glider-0.1.9.dist-info/entry_points.txt,sha256=HDuakHqHS5C0HFKsMIxMYmDU7-BLBGrnIJcYaVRu-s0,251
33
+ sql_glider-0.1.9.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
34
+ sql_glider-0.1.9.dist-info/RECORD,,
sqlglider/_version.py CHANGED
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
28
28
  commit_id: COMMIT_ID
29
29
  __commit_id__: COMMIT_ID
30
30
 
31
- __version__ = version = '0.1.7'
32
- __version_tuple__ = version_tuple = (0, 1, 7)
31
+ __version__ = version = '0.1.9'
32
+ __version_tuple__ = version_tuple = (0, 1, 9)
33
33
 
34
34
  __commit_id__ = commit_id = None
@@ -117,8 +117,8 @@ class GraphBuilder:
117
117
  edge_key = (item.source_name.lower(), item.output_name.lower())
118
118
  if edge_key not in self._edge_set:
119
119
  edge = GraphEdge(
120
- source_node=item.source_name,
121
- target_node=item.output_name,
120
+ source_node=item.source_name.lower(),
121
+ target_node=item.output_name.lower(),
122
122
  file_path=file_path_str,
123
123
  query_index=query_index,
124
124
  )
@@ -285,7 +285,7 @@ class GraphBuilder:
285
285
  return self._node_index_map[key]
286
286
 
287
287
  node = GraphNode.from_identifier(
288
- identifier=identifier,
288
+ identifier=key,
289
289
  file_path=file_path,
290
290
  query_index=query_index,
291
291
  )
@@ -61,15 +61,15 @@ def to_rustworkx(graph: LineageGraph) -> Tuple[rx.PyDiGraph, Dict[str, int]]:
61
61
  rx_graph: rx.PyDiGraph = rx.PyDiGraph()
62
62
  node_map: Dict[str, int] = {}
63
63
 
64
- # Add nodes
64
+ # Add nodes (use lowercase keys for case-insensitive lookup)
65
65
  for node in graph.nodes:
66
66
  idx = rx_graph.add_node(node.model_dump())
67
- node_map[node.identifier] = idx
67
+ node_map[node.identifier.lower()] = idx
68
68
 
69
- # Add edges
69
+ # Add edges (use lowercase for lookup to match node keys)
70
70
  for edge in graph.edges:
71
- source_idx = node_map.get(edge.source_node)
72
- target_idx = node_map.get(edge.target_node)
71
+ source_idx = node_map.get(edge.source_node.lower())
72
+ target_idx = node_map.get(edge.target_node.lower())
73
73
  if source_idx is not None and target_idx is not None:
74
74
  rx_graph.add_edge(source_idx, target_idx, edge.model_dump())
75
75
 
@@ -615,6 +615,12 @@ class LineageAnalyzer:
615
615
  if isinstance(target, exp.Table):
616
616
  return (self._get_qualified_table_name(target), ObjectType.UNKNOWN)
617
617
 
618
+ # CACHE TABLE
619
+ elif isinstance(self.expr, exp.Cache):
620
+ target = self.expr.this
621
+ if isinstance(target, exp.Table):
622
+ return (self._get_qualified_table_name(target), ObjectType.TABLE)
623
+
618
624
  # DELETE FROM table
619
625
  elif isinstance(self.expr, exp.Delete):
620
626
  target = self.expr.this
@@ -706,6 +712,10 @@ class LineageAnalyzer:
706
712
  elif isinstance(self.expr, exp.Drop):
707
713
  return table_node is self.expr.this
708
714
 
715
+ # For CACHE TABLE, the target is self.expr.this
716
+ elif isinstance(self.expr, exp.Cache):
717
+ return table_node is self.expr.this
718
+
709
719
  return False
710
720
 
711
721
  def _analyze_column_lineage_internal(
@@ -889,6 +899,7 @@ class LineageAnalyzer:
889
899
  "Drop": f"DROP {getattr(target_expr, 'kind', '')}".strip(),
890
900
  "Alter": "ALTER",
891
901
  "Truncate": "TRUNCATE",
902
+ "Cache": "CACHE TABLE",
892
903
  "Command": "COMMAND",
893
904
  }
894
905
 
@@ -943,6 +954,17 @@ class LineageAnalyzer:
943
954
  ):
944
955
  return (target_name, select_node)
945
956
 
957
+ # Check for CACHE TABLE AS SELECT
958
+ elif isinstance(self.expr, exp.Cache):
959
+ target = self.expr.this
960
+ if isinstance(target, exp.Table):
961
+ target_name = self._get_qualified_table_name(target)
962
+ select_node = self.expr.expression
963
+ if isinstance(
964
+ select_node, (exp.Select, exp.Union, exp.Intersect, exp.Except)
965
+ ):
966
+ return (target_name, select_node)
967
+
946
968
  # Check for MERGE statement
947
969
  elif isinstance(self.expr, exp.Merge):
948
970
  target = self.expr.this